应用程序脚本的新Date和getTime行为与浏览器不同

时间:2018-10-19 07:41:42

标签: javascript datetime google-apps-script google-sheets

在浏览器控制台中,我可以解析日期并以毫秒为单位获取时间:

new Date('2018-10-16 12:41:50.000000');
// => Tue Oct 16 2018 12:41:50 GMT+0200 (Central European Summer Time)
new Date('2018-10-16 12:41:50.000000').getTime();
// => 1539686510000

如果我在App脚本中执行相同的操作,则日期无法识别(默认为1970年纪元),getTime()只是中断(NaN):

function test_date() {
  Logger.log('new Date(date)');
  Logger.log(new Date('2018-10-16 12:41:50.000000'));
  Logger.log('getTime()');
  Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());
}

enter image description here
enter image description here

我丢失了某些内容还是只是new Date() / getTime()在应用程序脚本中被破坏了?

我在Google表格中运行上述脚本

3 个答案:

答案 0 :(得分:3)

Google Apps脚本使用RFC3339。因此2018-10-16 12:41:50.000000无法直接解析new Date('2018-10-16 12:41:50.000000')。这样,new Date('2018-10-16 12:41:50.000000')new Date('')相同,并且两个结果都变为Thu Jan 01 01:00:00 GMT+01:00 1970。为了解析日期,如何修改RFC3339的格式?

发件人:

Logger.log(new Date('2018-10-16 12:41:50.000000'));
Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());

收件人:

Logger.log(new Date('2018-10-16T12:41:50.000Z'));
Logger.log(new Date('2018-10-16T12:41:50.000Z').getTime());

结果:

Tue Oct 16 12:41:50 GMT+02:00 2018
1.53968651E12

注意:

  • 对于您而言,在Google Apps脚本中,脚本的时区会反映到结果中。在脚本编辑器中可以看到这种情况的时区。
    • 在脚本编辑器上。
      • 文件->项目属性->信息->时区
    • 您也可以通过脚本的Logger.log(Session.getScriptTimeZone())进行确认。
  • new Date('2018-10-16T12:41:50')也可以解析。

参考文献:

如果这不是您想要的,对不起。

答案 1 :(得分:0)

代替这个

  Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());

使用此

  Logger.log((new Date('2018-10-16 12:41:50.000000')).getTime());

答案 2 :(得分:0)

  

我是否缺少某些东西,还是App脚本中的新Date()/ getTime()只是被破坏了?

目前,Google Apps脚本和Chrome的JavaScript引擎不相同。另一方面,由于Google Apps Script在Google服务器上运行脚本,而Chrome在用户计算机上运行脚本,因此每种脚本都在不同的上下文中执行脚本。

我强调“此时”,因为在Google I / O 2018上宣布Google Apps脚本将在V8上运行。

相关