我以UTC格式存储在我的数据库中并调用
element.createdDate = new Date(element.createdDate.toString());
导致显示错误的日期。
调用
element.createdDate = new Date(element.createdDate.toUTCString());
什么都不返回。如何从UTC显示正确的时间?
答案 0 :(得分:1)
您的json响应似乎包含一个以UTC为ISO8601格式的字符串,然后您将从它们创建Date
个对象。
这部分代码很好:
if (element.createdDate) element.createdDate = new Date(element.createdDate.toString());
Date
对象是正确的。.toString()
,因为该值已经是字符串。这是多余的。这部分代码就是问题:
console.log("javascript date: " + new Date(element.depositDate.getUTCDate().toString()));
getUTCDate
函数只返回月份的日期。不要使用它。Date
对象,最终都会创建一个Date
对象,并且您依赖于隐式字符串转换来输出它。这将在不同的浏览器中有不同的行为。考虑console.log(new Date())
:
在Chrome中,这会在我的计算机上记录Fri Mar 17 2017 12:14:29 GMT-0700 (Pacific Daylight Time)
之类的内容。这就好像我调用console.log(new Date().toString());
它是一种RFC 2822格式(但不完全相同),并以当地时间表示。
在Firefox中,这会记录2017-03-17T19:14:46.535Z
之类的内容。这就好像我调用console.log(new Date().toISOString());
它是ISO8601格式,用UTC表示。
重点是,不要依赖隐含的未定义行为。如果您必须使用Date
个对象,则应使用console.log(element.createdDate.toISOString())
查看UTC时间的ISO8601表示。
如果您要使用日期和时间做很多事情,您可能更喜欢使用库,例如Moment.js,这可以使此类任务更加清晰。
答案 1 :(得分:0)
我以UTC格式存储在我的数据库中并调用
element.createdDate = new Date(element.createdDate.toString());
导致显示错误的日期。
2016-10-11T00:00:00Z
和Mon Oct 10 2016 20:00:00 GMT-04:00 (EDT)
完全是同一时刻。唯一的区别是一个以ISO 8601扩展格式显示,时区偏移00:00,另一个以RFC 2822(类似)格式显示,时区偏移-04:00(并假设EDT区域中有一个位置)。
调用
element.createdDate = new Date(element.createdDate.toUTCString());
什么都不返回。
这很不寻常。通常它会返回字符串或错误,但如果没有工作示例或任何代码来提供上下文,则无法说出原因。
如何从UTC显示正确的时间?
您尚未指定“正确”的含义。您正在显示同一时刻的日期和时间,只是在不同的格式和时区。