我遇到了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
我该如何解决这个问题?
谢谢
答案 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午夜)。
现在就你可以做些什么来“修复”这个问题而言......你需要先了解你想要代表什么样的价值,以及你想用它做什么。如果没有更多信息,我们无法真正帮助您。