2015-07-13 4 views
0

Это уже давно вызвало у меня проблемы, и я не думал, что это будет так сложно. У меня есть модель с некоторыми датами и дата данные, поступающие из API следующим образом:Ember.js и Dates - показывается как на день раньше фактического

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

Я создал вспомогательный формат даты-(который использует moment.js) для форматирования даты в режиме просмотра, например, так: Viewing dates

И это показывает это правильно. Однако, когда я переключаюсь в режим редактирования, элементы ввода по-прежнему ссылаются на одни и те же значения, но теперь все они идут на один день раньше! Editing dates

Это было безумие в течение некоторого времени. Я думал, что это может быть связано с информацией о часовом поясе в данных, но поскольку я не могу изменить данные, которые загружаются в мое приложение, как я могу заставить его просто отображать дату в данных, независимо от того, часовой пояс? Например, с датой Tollgate 1, я хотел бы, чтобы она показывала 15 апреля независимо от того, где пользователь находится в мире.

ответ

0

Хорошо, так как со многими вещами это не Эмбер, а просто вещь JavaScript. Это действительно трудно учиться одновременно!

Поскольку мои даты, сходящие с API, не имеют часового пояса, они считаются GMT, и поэтому мой часовой пояс EST в -4 часа заставляет его показывать как накануне. По-видимому, у instant.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')); 
    }) 
}); 
Смежные вопросы