Неисправность при преобразовании строки дат в формат ГГГГ-ММ-ДДЧЧ: ММ: СС-ЧЧ: ММ - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть дата начала, которая выглядит следующим образом:

var startDate = "Mon Jun 30 2014 00:00:00 GMT-0400 (EDT)";

И я пытаюсь отформатировать это в:

var endDate = "2014-06-30T00:00:00-04:00";

Я получил его для правильного полуформатирования, используя метод toISOString ():

var formattedDate = new Date(startDate);
formattedDate = formattedDate.toISOString();

Что форматирует его в «2014-06-30T04: 00: 00.000Z». Это близко к тому, что мне нужно, но мне было интересно, есть ли встроенный метод для форматирования его в формат «-04: 00»? Или мне нужно разбить мою строку на части и восстановить ее вместе в нужном формате?

Также я работаю над скриптом Google Apps, который является ES5, и стараюсь по возможности избегать jQuery.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Я полностью согласен с комментарием @JordanRunning.
Тем не менее, из любопытства я быстро собрал способ получить желаемый формат:

// two helper functions
function pad(number) {
  if (number < 10) {
    return '0' + number;
  }
  return number;
}

function getOffset(offset) {
  if(offset<0) {
    wminutes = 0 - offset;
    var posneg = "-";
  } else {
    wminutes = offset;
    var posneg = "+";
  }
  var hours = pad(Math.floor(wminutes/60));
  var minutes = pad(wminutes % 60);
  return posneg+hours+":"+minutes;
}

// the actual format function
Date.prototype.toMyFormat = function() {
  var format = this.getUTCFullYear() +
    '-' + pad(this.getMonth() + 1) +
    '-' + pad(this.getDate()) +
    'T' + pad(this.getHours()) +
    ':' + pad(this.getMinutes()) +
    ':' + pad(this.getSeconds());

  timezoneOffset = getOffset(this.getTimezoneOffset());
  format += timezoneOffset;
  return format;
}

// usage:
console.log(new Date().toISOString());
   // "2018-11-16T20:53:11.365Z"
console.log(new Date().toMyFormat());
   // "2018-11-16T21:53:11-01:00"
0 голосов
/ 17 ноября 2018

Вы можете просто переформатировать строку. Формат в OP соответствует формату, заданному для Date.prototype.toString в ECMAScript 2018, так что вы даже можете переформатировать его с помощью той же функции:

// Convert string in DDD MMM DD YYYY HH:mm:ss ZZ format to
// YYYY-MM-DDTHH:mm:ssZZ format
function formatDateString(s) {
  var m = {Jan:'01',Feb:'02',Mar:'03',Apr:'04',May:'05',Jun:'06',
           Jul:'07',Aug:'08',Sep:'09',Oct:'10',Nov:'11',Dec:'12'};
  var b = s.split(' ');
  return `${b[3]}-${m[b[1]]}-${b[2]}T${b[4]}${b[5].slice(-5,-2)}:${b[5].slice(-2)}`;      
}

console.log(formatDateString("Mon Jun 30 2014 00:00:00 GMT-0400 (EDT)"));

// Not recommended, but it will format any date where its 
// toString method is consistent with ECMAScript 2018
console.log(formatDateString(new Date().toString()));
0 голосов
/ 16 ноября 2018

Google Apps Script (GAS) имеет встроенный метод, который вы можете использовать для форматирования дат:

Utilities.formatDate()

Он основан на классе Java SimpleDateFormat.

Для форматирования даты, соответствующей вашим требованиям, должно быть достаточно:

var date = new Date("Mon Jun 30 2014 00:00:00 GMT-0400 (EDT)");

var formattedDate = Utilities.formatDate(
        date, 
        Session.getScriptTimeZone(), 
        "yyyy-MM-dd'T'HH:mm:ssXXX"
    );

Примечание: вам может понадобиться установить часовой пояс вашего скрипта из меню GAS GUI через:

File->Project Properties->Info

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...