【问题标题】:App scripts new Date and getTime not behaving like in the browser应用程序脚本 new Date 和 getTime 在浏览器中的行为不一样
【发布时间】:2018-10-19 07:41:42
【问题描述】:

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

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());
}


我是否遗漏了什么或者new Date() / getTime() 只是在应用脚本中被破坏了?

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

【问题讨论】:

  • 在解析未指定时区的日期时要格外小心。我已经看到 Chrome 假定设备的本地时区和 safari 强制 UTC。恶梦。如果您不知道时区,最安全的做法是强制 UTC 同时进行序列化和反序列化,至少这样您可以获得一致的行为并且您的日期不会神奇地增加。

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


【解决方案1】:

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') 也可以解析。

参考资料:

如果这不是你想要的,我很抱歉。

【讨论】:

    【解决方案2】:

    不是这个

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

    使用这个

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

    【讨论】:

      【解决方案3】:

      我是否遗漏了什么或者新的 Date() / getTime() 只是在应用脚本中被破坏了?

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

      我之所以强调“此时”,是因为在 Google I/O 2018 上宣布 Google Apps Script 将在 V8 上运行。

      相关

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-23
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 2010-09-26
        • 2020-01-12
        • 1970-01-01
        相关资源
        最近更新 更多