转换没有时区的 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 日期的主要内容,如果未能解决你的问题,请参考以下文章