如何使用autoform和矩库来正确处理流星中的GMT偏移/时区

时间:2015-04-28 20:38:18

标签: mongodb meteor momentjs meteor-autoform

我遇到了使用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日星期三记录了这个问题,但问题仍然是“今天问”

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

所以,帮助者将是:

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/ 推动正确的方向!