我遇到了使用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家伙可以删除标签!
答案 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/ 推动正确的方向!