我想只显示 1967 年 6 月 29 日的日期 - 但它返回到我的 Angular 应用程序时为 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...
我做错了什么?
最佳答案
如果您在时间末尾添加“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/
基本 moment.js 提供的本地化不涵盖时区转换。
关于javascript - Angular2-moment,MongoDB UTC 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091122/