Google скрипт formatDate проблема с использованием getScriptTimeZone

Я использую данные JDBC в веб-приложении, используя Google Script. Он извлекает данные из БД, а затем отображает их в формате HTML. Я думал, что использование Utilities.formatDate для преобразования дат результата jdbc в форматированные строки будет работать.

В моем файле Code.gs я использую:

var e_result = SQLstatement.executeQuery("select * from events...");
var resultsArray = [];
while(e_result.next()) {
  resultsArray.push({'start_dte': Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd")}); 
  // test formatDate
  Logger.log("pre format date="+e_result.getString('start_dte'));
  Logger.log("post format date="+Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd"));
}

Это выводит в Logger:

[15-08-21 04:32:50:580 PDT] pre format date=2015-07-23 00:00:00.0
[15-08-21 04:32:50:581 PDT] post format date=Dec 31

Дата до форматирования - это правильная дата, найденная в БД. Но код formatDate не дает ту же строку даты.

Я использовал "GMT-08:00" с теми же результатами, что и "дата в формате после" выше (думая, что это проблема с часовым поясом). Что мне не хватает??

1 ответ

Причина, по которой дата после форматирования возвращается как 31 декабря, заключается в том, что если неправильная дата или дата в неправильном формате передаются Date() Функция возвращает значение Wed Dec 31 1969 00:00:00, Ваше значение 'start_dte' должно быть в определенном формате для передачи в функцию Date(), чтобы его можно было правильно проанализировать и, следовательно, поместить в желаемый формат. Ниже приведен небольшой пример, чтобы сделать это более понятным:

function testDate(){

  var start = "Aug 7 2015 00:00:00 GMT+0100";
  var testDate = Utilities.formatDate(new Date(start), "GMT-08:00", "MMM-dd-yyyy");

  Logger.log(testDate);
}

Выход:

[15-08-21 12:46:20:285 PDT] Aug-06-2015

start также может быть просто Aug 7 2015 00:00:00 и это будет работать. Однако всякий раз, когда значение в формате, который Date() Функция не ожидает, что передается, она возвращает значение Dec 31 1969,

Другие вопросы по тегам