2015-06-29 2 views
2

У меня есть компонент date-filter, который я использую в своем приложении Ember, который работает только на начальном рендере, а не на перезагрузке страницы, или даже если я сохраняю файл (который запускает приложение для обновления в реальном времени).new Дата (эпоха), возвращающая недействительную дату внутри компонента 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 

} 

это step 2, что выходит из строя (возвращаться д g invalid date), если я обновляю страницу или даже сохраняю файл. Он всегда возвращает правильную строку даты при первом вызове этого компонента. Даже если я делаю new Date(epoch) в родительском компоненте и пытаюсь передать результат этому компоненту (для форматирования на иностранном языке), у меня такая же проблема.

Вопрос: как я могу выяснить, что происходит внутри новой даты (эпохи), или это проблема, связанная с компонентом?

+0

Нам нужно знать, какое значение вы получаете от «эпохи». –

+0

Какое значение вы передаете для инициализации? – Pointy

+1

@Pointy это была эпоха unix, созданная Date.new(), но когда она была сохранена, она была сохранена как строка, поэтому она не правильно вычислялась после первоначального рендеринга. ответ Т. Дж. Броудера исправил это для меня. – BrainLikeADullPencil

ответ

3

Я подозреваю, что ваше значение epoch - это строка (из всех цифр). Если это так, то

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

... исправит это. Обратите внимание, что JavaScript использует более новые «миллисекунды с эпохи», а не более старые (оригинальные) «секунды с эпохи». Поэтому, если это начнет давать вам даты, но они намного более назад во времени, чем вы ожидали, вам может понадобиться epoch * 1000.

Если это строка, то не является всех цифр, это вовсе не значение эпохи. Только Строковое значение, которое требуется для спецификации, требует new Date, чтобы понять один: added in ECMAScript5 и fixed in ECMAScript6 (относительно того, что делать, когда индикатор часовой пояс отсутствует).

Смежные вопросы