Как вы форматируете «2018-09-21 16:00:00 -0500» в скрипте приложений Google? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть дата в формате «гггг-мм-дд чч: мм: сс часовой пояс» (т.е. «2018-09-21 16:00:00 -0500») при использовании кода:

var d = new Date("2018-09-21 16:00:00 -0500")

Отладка показывает мне

d = Неверная дата

Я пытаюсь переформатировать дату, как показано ниже,

var days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];


var day = days[d.getDay()];
var hh = d.getHours();
var mm = d.getMinutes()

if(hh < 10) {hh = "0"+hh}
if(mm < 10) {mm = "0"+mm}

return day+" "+hh+mm

Что такоелучший способ отформатировать эту дату?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Ваша дата очень близка к ISO!Я бы начал с преобразования в ISO.Для того, что вы хотите, вам не нужен часовой пояс, поэтому жизнь будет проще, если мы забудем это ...

var parts = '2018-09-21 16:00:00 -0500'.split(' ');
var myDate = new Date(parts[0] + 'T' +  parts[1] + 'Z');
console.log(myDate)

// Now serialize...

var nearlyThere = myDate.toLocaleDateString(
    'en-EN',
    {timeZone:'UTC', weekday:'short',hour:'2-digit',minute:'2-digit',hour12:false }
)
console.log(nearlyThere.replace(' ','').replace(':',' ').toUpperCase())
0 голосов
/ 20 сентября 2018
  • Вы хотите проанализировать строковое значение yyyy-mm-dd hh:MM:ss timezone как объект даты.

Если мое понимание верно, как насчет этого ответа?Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Когда я увидел формат, я подумал, что RFC3339 близко к формату.Так как насчет следующего потока?

  1. Разделить значение на , что является пробелом.
  2. Соединить 1-й и 2-й элемент разделенного значения на "T".
  3. Добавление последнего элемента к объединенному значению.

Когда для этого потока используется 2018-09-21 16:00:00 -0500, значение преобразуется в 2018-09-21T16:00:00-0500.Это можно использовать как тип RFC3339.С помощью этого потока yyyy-mm-dd hh:MM:ss timezone может быть проанализирован как объект даты.

Пример сценария:

Шаблон 1:

Пример сценария, который отражен над потоком, выглядит следующим образом.

var str = "2018-09-21 16:00:00 -0500"; // yyyy-mm-dd hh:MM:ss timezone

var ar = str.split(" "); // Added
var str = ar.slice(0, 2).join("T") + ar[2]; // Added: Here str is "2018-09-21T16:00:00-0500".
var d = new Date(str);

var days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
var day = days[d.getDay()];
var hh = d.getHours();
var mm = d.getMinutes()
if(hh < 10) {hh = "0"+hh}
if(mm < 10) {mm = "0"+mm}

Logger.log(day+" "+hh+mm) // Added

return day+" "+hh+mm
Шаблон 2:

Как еще один шаблон, как насчет этого сценария?В Google Apps Script вы также можете использовать Utilities.formatDate().

var str = "2018-09-21 16:00:00 -0500";
var ar = str.split(" ");
var r = ar.slice(0, 2).join("T") + ar[2];
var d = new Date(r);
var res = Utilities.formatDate(d, Session.getScriptTimeZone(), "E hhmm").toUpperCase();
Logger.log(res)

Примечание:

  • Если формат отличается от yyyy-mm-dd hh:MM:ss timezone, возможно, этот скрипт не сможетиспользоваться.Пожалуйста, будьте осторожны с этим.

Ссылка:

Если я неправильно понимаю ваш вопрос, извините.

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