转换没有时区的 JSON 日期

Posted

技术标签:

【中文标题】转换没有时区的 JSON 日期【英文标题】:Convert JSON dates without timezone 【发布时间】:2011-04-16 10:02:05 【问题描述】:

我有一个 Web 服务,它返回例如一个 DateTime 对象:DepartureDate。 我使用 ajax 来获取它,在我看来,我使用这个函数将 JSON 日期字符串转换为 javascript 日期对象:

function convertToDate(jsonDate) 
    return eval("new " + jsonDate.substring(1, jsonDate.length - 1));

问题是new Date() 会考虑客户端计算机上的本地时间,因此不同国家/地区的客户端会得到不同的日期。我想获得从 web 服务返回的确切日期。 有什么简单的方法可以做到这一点吗?

【问题讨论】:

变量“jsonDate”的值是什么 例如可以是“/Date(1285321800000)/” 【参考方案1】:

问题是new Date() 考虑了客户端计算机上的本地时间

不。使用时间戳构造函数创建一个新的 Date 需要一个 UTC 时间戳。

例如在我的机器上,UTC+1:

new Date(0)   // Thu Jan 01 1970 01:00:00 GMT+0100 (CET)

好的,默认的toString 显示这个日期为 01:00:00,看起来是错误的,但这实际上是正确的时间。 UTC+1 中的 01:00:00 是 UTC 中的 00:00:00,这是时间戳 0 描述的时刻。

如果您想显示您根据 UTC 时间戳创建的日期,请使用 date.toUTCString() 或使用 getUTCFullYear()getUTCMonth() 等获取和格式化日期的一致部分。

不过,请不要eval

new Date(parseInt(jsonDate.slice(6, -1), 10))

【讨论】:

感谢您的精彩回答 bobince。我不擅长日期和东西,所以我可能不明白这里的一切,但我按照你的建议做了,结果还是一样。如果我在我的机器上更改我的时区,时间就会改变(无论你在哪个时区,我都希望它们保持不变,并且它们应该遵循 AST 时区。) toString()显示的时间会根据您的时区而变化,但这并不意味着日期有任何不同。无论您所在的时区如何,new Date(1285321800000).getUTCHours() 始终为 9。坚持使用getUTC...setUTC... 函数,日期就会如您所愿。

以上是关于转换没有时区的 JSON 日期的主要内容,如果未能解决你的问题,请参考以下文章

JSON如何反序列化日期时间并将UTC转换为指定时区?

转换为没有时区的日期和时间? [复制]

如何将日期字符串转换为没有时区的日期对象

如何将日期/时间从 GMT 转换为本地时区

解析没有时区转换的日期

Python - 在特定时区设置日期时间(没有 UTC 转换)