在javascript中将日期转换为JSON时出现问题



一旦Date对象被创建为

var oDate = new Date(2014,01,21,23,00,00);

返回时间为2014年2月21日星期五23:00:00 GMT+0530(印度标准时间(。但是当我尝试将其转换为JSON时。

oDate.toJSON() // "2014-02-21T17:30:00.000Z"

为什么小时和分钟会更改?小时应为23,分钟应为00。

当您在Date对象上调用toJSON()时,它会使用符合ISO8601标准toISOString()返回一个表示Date的字符串,例如YYYY-MM-DDTHH:MM:ss.sssZ。时区是始终UTC,因此在您的示例中有所不同。

请参阅此处以获取有关Javascript中Date对象的更多信息。

关于您的示例,有几件事需要提及:

  1. 日期和时间是特定于区域设置的,您的浏览器会根据您的系统时钟建立日期和时间(您可以更改此设置(
  2. 当您序列化日期和时间时,此区域设置信息将被转换为时间戳
  3. 如果您将此时间戳保存在数据库中,然后使用Date.parse()将此信息重新加载到浏览器中,然后您的浏览器将以适合您当前时区的日期和时间显示此信息,例如印度标准时间

我创建了一个简单的jsFiddle作为示例。在我当前的时区GMT中,当查看winterDatesummerDate时,这是一个重要的例子,因为在这个时区的夏季,我们输入夏令时并将时间提前一小时。重要的是,Javascript能够理解这一点,并捕捉时区,从而保留事件发生时间的普遍价值。如果您更改系统的时区,然后重新加载浏览器,您将能够亲眼看到这种行为。

我希望这能帮助你更多地了解这种行为,以及为什么它很重要。

为什么小时和分钟会更改?

因为它不再用控制台中显示的印度标准时间表示,而是用UTC(Zulu时间,如ISO 8601字符串所示(表示。

小时应为23,分钟应为00。

没有。如果你想在UTC中创建一个23:00的时间,那么你应该使用

var oDate = new Date(Date.UTC(2014,01,21,23,00,00));

这实际上是按预期工作的,并序列化为UTC,因为当您加载JSON对象时,您会再次获得正确的Date。使用toJSON((时,时间以UTC存储。

指定人:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON

测试代码:

var oDate = (new Date()).toJSON();
var pDate = new Date(oDate);
console.log("Serialized date object: " + oDate);
console.log("Actual date object: " + pDate);

请记住,"2014-02-21T17:3:00.000Z"中的最后一个"Z"表示时间确实在UTC 中

更多信息:-

http://en.wikipedia.org/wiki/ISO_8601

供参考:-

如何格式化Microsoft JSON日期?

相关内容

  • 没有找到相关文章

最新更新