我在Ember应用程序中使用了一个date-filter
组件,它只在初始渲染时工作,而不在页面重新加载时工作,甚至在我保存文件时(这会触发应用程序进行实时更新)。
在我的应用程序的主模板中,我像这样呈现日期过滤器,并将其传递给unix时间戳
{{date-filter unixepoch=item.date}}
然后,在components/date-filter.js
中,我使用名为timeConverter
的计算属性将unix历元更改为根据用户选择的语言格式化的时间字符串,然后在我的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
)。它总是在第一次调用此组件时返回正确的日期字符串。即使我在父组件中执行new Date(epoch)
,并尝试将结果传递给该组件(以进行外语格式化),我也会遇到同样的问题。
问题:我如何才能弄清楚新Date(epoch)内部发生了什么,或者这是否是与组件相关的问题?
1条答案
按热度按时间dgsult0t1#
我怀疑你的
epoch
值是一个字符串(所有数字)。如果是,那么…将通过将其转换为数字来解决问题(
+
只是一种方法,此答案列出了您的选项及其优缺点)。请注意,JavaScript使用新的“自大纪元以来的毫秒数”,而不是旧的(原始的)“自大时代以来的秒数”。因此,如果这样做开始给你日期,但它们比你预期的要早得多,你可能希望epoch * 1000
将秒数转换为毫秒数。如果它是一个不是所有数字的字符串,那么它根本不是一个历元值。规范要求
new Date
理解的唯一字符串值是此处规范中描述的值(尽管所有主要的JavaScript引擎也理解使用美国日期顺序中的/
[而不是-
]的未记录格式[不考虑区域设置]:mm/dd/yyyy
-不要使用它,使用标准格式)。