1

我在使用 mongo 和 autoform 处理日期/时间时遇到了问题。

我从另一个数据库系统开始迁移,在那里我将日期存储为字符串。

迁移是在 PHP 中进行的,我使用以下内容转换为 Mongo 日期:

return new MongoDate(strtotime($date));

因此,例如,我从 1960 年 7 月 30 日(1960 年 7 月 30 日)开始

在 Mongodb 中,我看到:

ISODate("1960-07-30T05:00:00.000+0000"),

而且,当我使用助手和矩库在我的表格网格中查看它时:

Template.registerHelper("mdy", function (date) {
  if (date) {
    return moment(date).format('MM/DD/YYYY');
  }
});

我得到:1960 年 7 月 30 日

然后,我在一个表单中打开它,使用autoForm这样的模式:

someDate: {
type: Date,
}

仍然,我明白了07/30/1960

但随后我将其保存到数据库中,然后在数据库中查看保存的内容:

ISODate("1960-07-30T00:00:00.000+0000"),

(注意它已从 T05 更改为 T00)

现在,当我在表格网格中显示它时,我看到:

07/29/1960

但有趣的是,如果我在 中再次打开该记录autoform,它会显示07/30/1960

因此,时区或 GMT 偏移量或类似的东西显然有问题

有人知道我错过了什么吗?

编辑:有趣的观察...我昨天,4 月 28 日星期二,今天是 4 月 29 日星期三记录了这个问题,但问题仍然是“今天问”

在此处输入图像描述

编辑:添加 mongodb 标签......如果这不是 mongo 问题,你们 mongo 家伙可以删除标签!

4

1 回答 1

1

我找到的解决方案是使用 moment.utc(date) 来格式化日期,而不仅仅是 moment(date)。

因此,助手将是:

Template.registerHelper("mdy", function (date) {
  if (date) {
    return moment.utc(date).format('MM/DD/YYYY');
  }
});

感谢: http: //blog.skylight.io/bringing-sanity-to-javascript-utc-dates-with-moment-js-and-ember-data/ 朝着正确的方向前进!

于 2015-07-21T14:43:34.373 回答