【问题标题】:Javascript, Date.parse with no timezoneJavascript,无时区的 Date.parse
【发布时间】:2014-07-01 16:37:36
【问题描述】:

我的 Javascript 日期有问题。

我收到一个包含日期的 JSON,当我尝试获取日期对象时,它返回不同时区的值,并且通常将日期移到前一天的 20 小时。

例子:

json中的值为:"2014-06-01T00:00:00"

当我这样做时

var d2 = new Date(Date.parse("2014-06-01T00:00:00"))

返回

2014 年 5 月 31 日星期六 20:00:00 GMT-0400(东部夏令时间)

当我预料到的时候

2014 年 6 月 1 日星期日 00:00:00 GMT-0400

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow。您可以使用“{}”工具栏按钮格式化源代码。这次我替你做了。

标签: javascript json datetime


【解决方案1】:

Date.parse 返回自 UTC 纪元以来的毫秒数,因此无论您传入什么日期/时间字符串,都会输出 UTC。 (有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse。)

如果您想将其转换为当地时间,您必须知道您与 UTC 的偏移量。因此,您可以从 JavaScript 中获得它:

var offset = new Date().getTimezoneOffset()*60*1000;

Date.prototype.getTimezoneOffset 返回偏移量以分钟为单位,因此我们必须转换为毫秒。)

然后您可以使用该偏移量构造您的日期:

var date = new Date(Date.parse("2014-06-01T00:00:00") + offset);

如果您想将该日期解释为在不同的时区,您只需使用适合该时区的任何毫秒偏移量。但请记住夏令时:这肯定会使事情复杂化。

【讨论】:

    【解决方案2】:

    来自Date.parse的Mozilla文档:

    ECMAScript 5 ISO-8601 格式支持

    或者,日期/时间字符串可以是 ISO 8601 格式。例如,可以传递和解析“2011-10-10”(只是日期)或“2011-10-10T14:48:00”(日期和时间)。 UTC 时区用于解释不包含时区信息的 ISO 8601 格式的参数。

    您的值不包括时区信息,因此假定为 UTC。相关日期的午夜 UTC 是您当地时区的晚上 8 点。请注意,Date 对象本身没有时区的概念——它只是自 Unix 纪元以来的毫秒数。当您将其转换为带有toString 的字符串时,that 使用浏览器的本地时区。您可以使用 toUTCString 转换为使用 UTC 的文本表示形式(因此在这种情况下,您最终会得到您开始时的 UTC 午夜)。

    现在,就您可以采取哪些措施来“解决”问题而言……您需要首先了解您要代表什么价值,以及您想用它做什么。如果没有更多信息,我们无法真正帮助您。

    【讨论】:

    • 我想最简单的解决方法是手动将时区附加到输入字符串。
    • @ÁlvaroG.Vicario:要进行修复,我们必须知道 OP 真正想要实现的目标 - 目前还不清楚。
    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-02-11
    • 1970-01-01
    • 2013-01-29
    • 2018-10-06
    相关资源
    最近更新 更多