Google 使用 getScriptTimeZone 的脚本格式日期问题

Google script formatDate issue using getScriptTimeZone

我正在使用 Google 脚本在网络应用程序中使用 JDBC 数据。它从数据库中提取数据,然后将其显示在 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"));
}

这输出到记录器:

[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" 得到的结果与上面的 "post format date" 完全相同(认为这是时区问题)。我错过了什么??

post 格式日期被 return 编辑为 12 月 31 日的原因是,如果将错误的日期或错误格式的日期传递给 Date() 函数,它return 是 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() 函数不期望的格式的值时,它 return Dec 31 1969.

的值