Angular-UI Один день вычитается из даты в ui-date

Ситуация Я хочу использовать ui-date для установки/редактирования даты в своем приложении. Я использую последние стабильные версии angular, angular-ui, jquery-ui и т. д.

Проблема Как только дата выбрана с помощью средства выбора даты, дата в моей модели будет равна выбранной дате минус 1 день. Он также будет отправлен на мой сервер и сохранен в моей базе данных таким образом.

Планкер http://plnkr.co/edit/Ft14Wa?p=preview Изначально дата в поле выбора даты и дата в моей модели совпадают. После выбора даты они различаются.

Вопрос Что здесь происходит???


person Wilgert    schedule 05.03.2013    source источник


Ответы (4)


ui-date ожидает, что ваша модель будет фактическим объектом даты. В вашем случае это строка. Если вы посмотрите на консоль, вы увидите, что angularUI фактически информирует вас об этом. Затем он советует вам добавить дополнительный тег ui-date-format с указанным форматом даты, с которым ваша строка даты будет проанализирована в объект даты.

Короче говоря, вам нужно настроить ввод следующим образом:

<input ui-date="{dateFormat: 'yy-mm-dd'}" ui-date-format="yy-mm-dd" ng-model="customer.contract_end_date"></input>

Работающий плункер.

person Stewie    schedule 05.03.2013
comment
Я использовал директиву ui-date-format, но без значения. Раньше "{dateFormat: 'yy-mm-dd'}" не пользовался, так что не работало, где-то давно заблудился, что так не пробовал. Спасибо @stewie! - person Wilgert; 05.03.2013
comment
Параметры конфигурации пользовательского интерфейса jQuery немного загадочны. Я сам часто с ними теряюсь. - person Stewie; 05.03.2013

это решает мою проблему. angularjs использует часовой пояс по умолчанию, который учитывает часовое время. установка параметра часового пояса ng-модели на четкое часовое время UTC......

ng-model-options="{timezone:'UTC'}"
person Ghebrehiywet    schedule 31.05.2016

Проблема в том, что angular использует свой часовой пояс по умолчанию при анализе даты, выбранной в средстве выбора даты. Чтобы решить эту проблему, вы можете использовать директиву ng-model-options, которая принимает параметр «часовой пояс».

<input type="text" ng-model-options="{timezone:'UTC'}" ... >
person slomp    schedule 26.04.2016

Я установил формат даты как дд-мм-гггг в соответствии с моим требованием. затем установите тип даты как строку.

<input type="text" class="form-control col-xs-9"
                        data-date-format="dd-MM-yyyy" data-autoclose="1"
                        ng-model="modelName"
                        date-type="string" bs-datepicker required>
person Shatayu Darbhe    schedule 07.12.2016
comment
поддержка строки типа даты была удалена в более новых версиях AngularJS. - person joelmdev; 09.01.2018