2017-03-17 69 views
0

日期显示正确的日期我有存储在我的UTC格式数据库日期,并呼吁的JavaScript存储为UTC对服务器

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

结果显示错误的日期。

调用

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

回报什么。我如何从UTC显示正确的时间?

enter image description here

+0

您在这里提供的信息不足以帮助我们。你说你在你的数据库中有UTC的数据,但是你显示的是一个JS'Date'对象。你是怎么到达那里的?什么数据发送到您的JS代码?你如何解析它以得到一个'Date'对象?另外,你的输出显然也是一个Date对象。这是你的预期吗?如果不是,你期望输出什么? –

+0

此外,请确保您了解“Date”对象的工作原理 - 它在内部跟踪UTC。其中一些函数保留在UTC(如'toUTCString'或'getUTCHours')中,一些函数转换为本地时间'(如'toString'或'getHours')。如果你只是'console.log'这个对象而不明确地调用一个发出字符串的函数,那么这个实现是不确定的,并且在不同的浏览器中有所不同(有些会给出本地时间,有些给出UTC时间)。 –

+0

日期是从角度/内核中建立的日期。元素只是forEach循环的每次迭代,而createdDate是存储在mongo中的UTC日期。生病添加了全功能的图片 – mrusername

回答

-1

尝试用日期格式/此刻他们会帮助你。它们很容易使用

+0

请仅使用* Post answer *按钮才能得到实际答案。一旦你有[足够的代表](https://stackoverflow.com/help/privileges/comment),你就可以添加评论的问题。 –

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,它可以使这样的任务更清晰。

+0

如果它是从数据库返回的字符串值,那么调用'getUTCDate()'应该失败,不会返回月份的日期... –

+0

这是真的。此外,它不会使图片中显示的输出,所以我认为OP必须根据他在[早先的屏幕截图]中显示的代码(https://i.stack.imgur.com/ vgUjT.png),然后在编辑中将其删除。 –

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(like)格式显示,时区偏移量为-04:00(并假设EDT区域为局部区域)。

调用

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

回报什么。

这是不寻常的。通常它会返回一个字符串或一个错误,但没有一个工作示例或任何代码来提供上下文,所以不可能说出原因。

如何从UTC显示正确的时间?

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

相关问题