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
,