2016-02-26 6 views
1

Я пишу приложение в Angular, и я использую Angular UI вместе с ним. У меня есть DatePicker, который выглядит следующим образом:Угловой UI datepicker получает неправильную дату

<input type="text" 
     ng-required="true" 
     name="targetDate" 
     uib-datepicker-popup="MMMM yyyy" 
     min-mode="'month'" 
     datepicker-mode="'month'" 
     is-open="opened" 
     ng-click="openCalendar()" 
     close-on-date-selection="true" 
     show-button-bar="false" 
     min-date="today" 
     ng-model="targetDate" /> 

Проблема заключается в том, что при выборе, например, июль 2016, значение, которое у меня есть в моей targetDate модели «2016-06-30T21: 00: 00.000 Z ", что составляет ровно 3 часа до июля 2016 года. Я думаю, что это связано с моим местным временем и временем UTC, потому что я живу в регионе, где местное время составляет +2 часа UTC, но я не знаю, почему это происходит и как это исправить. Есть идеи?

+1

Вам нужно скопировать UTC в Local time, используя MomentJs library http://momentjs.com/docs/. если вы уже знаете, что momentjs читает это для Quick http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/ – Prasad

+0

http://momentjs.com/docs/ для используя с начала – Prasad

+0

эта проблема была упомянута здесь: http://stackoverflow.com/questions/22623872/angular-ui-datepicker-adjusting-for-timezone – Akis

ответ

0

Вы можете обратиться эту тему - GitHub

Попробуйте изменить часовой пояс машины как дата OBJ выбирает местное время вашей машины по умолчанию.

Или попробуйте проанализировать объект Date в миллисекундах методом getTime(), если его стоит и добавить 10800000 мс, что составляет 3 часа к модели даты.

Так что ваша новая модель даты будет выбрана вами (в миллисекундах) + 10800000 = Желаемая дата UTC.

+3

Вы действительно предлагаете, чтобы пользователь меняет свое местное время только потому, что приложение хочет отображать что-то в UTC? –

+0

Для временного решения конвертируйте объектную модель даты в миллисекунды и добавьте 10800000 (3 часа) – Vinay

+0

Итак, ваша новая модель даты будет выбрана вами (в миллисекундах) + 10800000 = Желаемая дата UTC. – Vinay

0

Это на самом деле решить мою проблему, и вот мой код:

service.ConvertDateToJSONDate = function (dateInput) { 
     if (dateInput === null || dateInput === undefined) { 
      return null; 
     } 
     //return "\/Date(" + dateInput.getTime().toString() + ")\/"; 
     return "\/Date(" + (dateInput.getTime() + 10800000).toString() + ")\/"; 
    }; 

Использование: service.ConvertDateToJSONDate (SelectedDateObjectToBeConverted);

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