Ember.js和Dates - 显示比实际提前一天

时间:2015-07-13 18:00:24

标签: date ember.js

这已经给我带来了很长一段时间的麻烦,我不认为这会如此困难。我有一个带有一些日期的模型,以及来自API的日期数据,如:

{
  ...
  tollgate1: '2016-04-15',
  tollgate2: '2017-01-01',
  projectClose: '2016-10-21',
}

我创建了一个格式日期助手(使用moment.js)来格式化视图模式中的日期,如下所示: Viewing dates

这表明它正确。但是,当我切换到编辑模式时,输入元素仍然引用相同的值,但现在它们都提前一天了! Editing dates

一段时间以来一直令人抓狂。我认为这可能是由于数据中的时区信息,但由于我无法更改提供给我的应用程序的数据,我怎么能让它只显示数据中的日期,无论时区?例如,对于Tollgate 1日期,无论用户在世界的​​哪个位置,我都希望它显示在4月15日。

1 个答案:

答案 0 :(得分:1)

好吧,就像许多事情一样,这不仅仅是一个Ember事情,而只是一个JavaScript事物。这是真的一次很难学习!

由于我从API下来的日期没有时区,因此它们被假定为GMT,因此我的EST时区为-4小时,使其显示为前一天。显然,moment.js有一些内置的处理方式,这就是为什么格式化日期助手工作正常。

我要解决的是只为我的模型添加每个日期的计算属性,并通过从输入日期中拉出部分来创建一个新的Date对象,如下所示:

function convertDateToUtc(d) {
  if(d) {
    return new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());
  } else {
    return null;
  }
}

export default DS.Model.extend({
...
  tollgate1Date: Ember.computed('tollgate1', function() {
    return convertDateToUtc(this.get('tollgate1'));
  })
});