javascript - new Date(epoch) 在 Ember 组件中返回无效日期

标签 javascript ember.js

我有一个 date-filter 组件,我在我的 Ember 应用程序中使用它只适用于初始渲染,而不适用于页面重新加载,或者即使我保存文件(这会触发应用程序实时更新)。

在我的应用程序的主模板中,我像这样渲染日期过滤器并传递一个 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

}

如果我刷新页面甚至保存文件,则第 2 步 失败(返回无效日期)。它总是在第一次调用该组件时返回正确的日期字符串。即使我在父组件中执行 new Date(epoch),并尝试将结果传递给该组件(以进行外语格式化),我也遇到了同样的问题。

问题:如何判断new Date(epoch)内部发生了什么,或者是否是组件相关的问题?

最佳答案

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

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

...将通过将其转换为数字来修复它(+ 只是一种方法,this answer 列出了您的选项及其优缺点)。请注意,JavaScript 使用较新的“自大纪元以来的毫秒数”而不是较旧的(原始)“自大纪元以来的秒数”。因此,如果这样做开始为您提供日期,但它们的时间比您预期的要早得多,您可能需要 epoch * 1000 将秒转换为毫秒。

如果它是不是所有数字的字符串,则它根本不是纪元值。规范要求new Date 理解的唯一 字符串值是规范here 中描述的值。 (尽管所有主要的 JavaScript 引擎也理解使用 / [不是 -] 的未记录格式,以美国日期顺序 [不考虑语言环境]:mm/dd/yyyy — 不要使用它,使用标准代码)。

关于javascript - new Date(epoch) 在 Ember 组件中返回无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121078/

相关文章:

javascript - Angular : Two-way binding 中的响应式(Reactive)表单

javascript - Ember 计算等于不适用于 ember-mirage

javascript - Ember : Defining Controller Breaks Route Modal

javascript - 使用 Ember Handlebars 有条件地向元素添加 Action

javascript - 当 ember 完成 DOM 更新时做一些事情

javascript - expect(jest.fn()).toHaveBeenCalled() 错误

javascript - 从本地 json 文件填充数据表

javascript - Ember.js - "Cannot perform operations on a Metamorph that is not in the DOM"由模板引起

javascript - 如何从导入调用异步函数?

javascript - 下拉隐藏在 jquery slider 后面