Angular2-moment,MongoDB UTC时间

时间:2018-03-04 01:44:02

标签: javascript angular mongodb angular2-moment

我希望只显示日期为1967年6月29日 - 但它将回到我的角度应用程序1967-06-28 19:00:00.000 - 所以它自然显示在1967年6月28日。

我的HTML表单日期选择器 - 已选择:06/29/1967

表格已提交......

MongoDB显示:1967-06-28 19:00:00.000

我在TZ中心,所以这对于UTC中的存储是有意义的。

Mongo数据类型是"日期"在mongoose模式中定义如下:

,dob: {
    type: Date
    ,required: false
    ,default: null
}

要在浏览器上进行转换,我安装了 - angular2-moment - 因为它已宣传'一个完成这件事的功能。我没有收到错误 - 但我也没有得到任何改变。

DOB: {{user.dob | date:'mediumDate' }} 
DOB: {{user.dob| amLocal | amDateFormat: 'MMM DD, YYYY'}}

同时显示

Jun 28, 1967

具有讽刺意味的是 - 编辑表单的日期字段,显示06/29/1967 ...

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您添加' Z'到了最后,这确保它被解析为UTC,如下所示:

1967-06-28 19:00:00.000Z

问题在于,如果您将数据库中的输入视为UTC,则最终会在06-29之后9小时结束,而不是将日期/时间向前转。所以看起来您的数据库时间戳实际上落后于UTC几个小时。

我在东部标准时间,这需要:

new Date(Date.parse('1967-06-28 19:00:00.000 GMT-0900'))

......得到这个:

Thu Jun 29 1967 00:00:00 GMT-0400 (EDT)

顺便说一句,如果您希望能够将除固定UTC偏移之外的任何内容转换为客户端系统的当地时间,那么您需要:https://momentjs.com/timezone/

基本时刻提供的本地化。不包括时区转换。