新的日期(epoch)在Ember组件内返回无效日期

时间:2015-06-29 16:41:28

标签: javascript ember.js

我在我的Ember应用程序中使用了date-filter组件,该组件仅适用于初始渲染,而不适用于页面重新加载,或者即使我保存文件(触发应用程序进行实时更新)。

在我的应用程序的主模板中,我像这样渲染日期过滤器,传递一个unix时间戳

{{date-filter unixepoch=item.date}}

然后,在components/date-filter.js中,我使用名为timeConverter的计算属性将unix时期更改为根据用户选择的语言格式化的时间字符串,然后在我的{{ 1}}文件我templates/components/date-filter.hbs显示结果

{{timeConverter}}

如果我刷新页面甚至保存文件,则timeConverter: function(){ //step 1: get the epoch I passed in to the component var epoch = this.get('unixepoch'); //step 2: create a human readable date string such as `Jun 29, 2015, 12:36PM` var datestring = new Date(epoch) //do language formatting --code omitted as the problem is with step2 } 失败(返回step 2)。它始终在第一次调用此组件时返回正确的日期字符串。即使我在父组件中执行invalid date,并尝试将结果传递给此组件(进行外语格式化),我也遇到了同样的问题。

问题:我怎样才能弄清楚新日期(时代)内发生了什么,或者它是否与组件有关?

1 个答案:

答案 0 :(得分:5)

我怀疑您的epoch值是字符串(所有数字)。如果是,那么

var datestring = new Date(+epoch);
// Note ------------------^

...将解决它。请注意,JavaScript使用较新的“自The Epoch以来的毫秒”而不是较旧的(原始)“自The Epoch以来的秒数”。因此,如果这样做会开始为您提供日期,但它们的回溯时间远远超出您的预期,您可能需要epoch * 1000

如果它是不是所有数字的字符串,那么它根本不是一个纪元值。规范要求new Date理解的字符串值是added in ECMAScript5fixed in ECMAScript6(关于在没有时区指示符时该怎么做)。