没有时区的Javascript,Date.parse

时间:2014-07-01 16:37:37

标签: javascript json datetime

我遇到了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(东部夏令时)

当我预料到

  

Sun Jun 01 2014 00:00:00 GMT-0400

我该如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

来自Date.parse的Mozilla文档:

  

ECMAScript 5 ISO-8601格式支持

     

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

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

现在就你可以做些什么来“修复”这个问题而言......你需要先了解你想要代表什么样的价值,以及你想用它做什么。如果没有更多信息,我们无法真正帮助您。