使用getScriptTimeZone的Google脚本formatDate问题

时间:2015-08-21 11:56:31

标签: jdbc google-apps-script formatdatetime

我正在使用Google Script在webapp中使用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"));
}

输出到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 个答案:

答案 0 :(得分:1)

将邮件格式日期作为Dec 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的值。