javascript - Angular2-moment,MongoDB UTC 时间

标签 javascript angular mongodb angular2-moment

我想只显示 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/

相关文章:

javascript - 恢复页面刷新时下拉选择的选项?

angular - 如何从在 mat-cell 中有输入的表中导出数据?

angular - 单击取消按钮后未打开“打印”对话框

c# - 使用 C# 驱动程序不工作查询 mongodb

javascript - 我如何使用从 audioContext 创建的分析器来检测是否可以听到播放的声音?

javascript - javascript如何在后台发送http请求?

javascript - 响应式容器,但图像不占满宽度

angular - 如何在 AngularFire/TypeScript 中访问 FirebaseError 的 "code"属性?

node.js - 如何访问预更新 Mongoose 中间件中的文档对象?

mongodb - 将元素从 $pull 移动到另一个数组