JavaScript在服务器上显示为UTC的日期显示正确的日期

时间:2017-03-17 18:47:53

标签: javascript date datetime utc

我以UTC格式存储在我的数据库中并调用

element.createdDate = new Date(element.createdDate.toString());

导致显示错误的日期。

调用

element.createdDate = new Date(element.createdDate.toUTCString());

什么都不返回。如何从UTC显示正确的时间?

enter image description here

2 个答案:

答案 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:00ZMon 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显示正确的时间?

您尚未指定“正确”的含义。您正在显示同一时刻的日期和时间,只是在不同的格式和时区。