【问题标题】:Converting a string timestamp to Date results in reset to UNIX epoch将字符串时间戳转换为日期会导致重置为 UNIX 纪元
【发布时间】:2013-02-13 14:02:18
【问题描述】:

我在将字符串转换为谷歌应用脚​​本中的日期对象时遇到了一些问题。

我的日期采用以下格式,来自第 3 方 API:

2013-01-17T17:34:50.507

我正在尝试将其转换为 Date 对象:

return Date(stringDate);

这是被退回的:

Thu Jan 01 01:00:00 GMT+01:00 1970

谁能告诉我我做错了什么,以及如何解决这个问题?

【问题讨论】:

    标签: date google-apps-script datetime-format


    【解决方案1】:

    使用moment.js,解析任何ISO 8601 format 就这么简单。

    var date = Moment.moment("2013-01-17T17:34:50.507").toDate();
    

    您也可以使用 moment.js 来解析您的任意日期字符串。

    要在 GAS 中使用 moment.js,您只需在脚本编辑器中添加它。 在 GAS 脚本编辑器中打开您的脚本并转到“资源”然后“库...”,然后输入此项目密钥 MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48 并单击“添加”。从下拉列表中选择版本,然后单击“保存”。现在,您可以在 GAS 中使用 moment.js。

    moment.js 可用于解析日期字符串、创建格式化的日期字符串以及许多其他日期操作。感谢作者!

    您可以找到 moment.js 文档here

    【讨论】:

    • +1 用于 Moment.js,但您可能更喜欢嵌入自己的而不是依赖库。正确的例子是,moment.js 会随着时间而改变。例如弃用它将使用的特定日期格式字符串可能会破坏您的脚本,自己嵌入它可以让您比升级库版本更好地管理转换。
    • @Jonathon,感谢您的评论。为什么我们不坚持将它添加到脚本时指定的库版本?所以,我们不必担心库的变化。我错过了你的意思吗?
    • 你可以。但是,如果一个库只是一个 .js 库的 GAS 包装器,尽管我更喜欢嵌入源代码,这样您就可以准确控制您使用的是哪种风格。速度也快。
    【解决方案2】:

    似乎 Date 对象不知道如何处理该日期。日期在ISO 8601 format。如果给定时区信息,Javascript 可以处理日期。

    您必须进行一些测试,但如果给您的日期是 UTC 时间,那么只需在日期字符串的末尾添加一个 Z,然后再调用 new Date()

    编辑:解析日期时,Apps 脚本日期对象似乎无法处理 UTC 以外的时区。 I opened an issue for it.

    【讨论】:

    • 我确认我收到的日期是格林威治标准时间,我所处的环境也是格林威治标准时间 - 我尝试添加 Z,但不幸的是问题仍然存在。我可以让 Date 对象表示正确日期的唯一方法是,如果我出于某种原因使用 posix 时间进行初始化,尽管不幸的是,这不是一个选项。感谢您的帮助。
    • 你应该打电话给new Date(dateString),而不仅仅是Date(dateString)
    【解决方案3】:

    它在 GScript 中不起作用,至少在我编写它的时候对我来说是这样。 这篇文章提供了一个可行的选择:How do I format this date string so that google scripts recognizes it?

    【讨论】:

    • 请不要只提供答案链接。至少对链接中解释的内容提供一个小摘要。
    • 如果 StackOverflow 的答案因某种原因被作者删除会怎样?您应该至少概述所提出的解决方案。
    【解决方案4】:

    截至目前new Date() 似乎有效:

    var dT = new Date("2013-01-17T17:34:50.507");
    console.info("dT: %s or %d", dT, dT.getTime());
    

    在 Google Apps 脚本中返回 dT: Thu Jan 17 17:34:50 GMT+01:00 2013 or 1.358440490507E12

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 2013-01-08
      • 2019-08-21
      • 2021-05-09
      • 2011-03-16
      • 1970-01-01
      • 2014-01-25
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多