2015-10-09 3 views
2

Я изо всех сил пытаюсь заставить эту работу работать. Вот моя проблема.Javascript new Date несоответствие

Я получаю даты от REST API в разных форматах (mm-dd-yyyy-timezone, mm-dd-yyy hh:mm:ss, yyyy-mm-dd-timezone, yyyy-mm-dd hh:mm:ss), но мне нужно отформатировать его в формате yyyy-mm-dd. Я использовал подстроку, чтобы захватить первые 10 символов, чтобы получить Datestring, игнорируя время/часовой пояс.

Во время этого процесса я наблюдал эту проблему.

new Date("08-11-1987") gives me Tue Aug 11 1987 00:00:00 GMT-0700 (Pacific Daylight Time) 

Где, как,

new Date("1987-08-11") gives me Mon Aug 10 1987 17:00:00 GMT-0700 (Pacific Daylight Time) 

Почему существует разница в один день при создании объекта Date.

+1

Ваш серверный API не должен возвращать дату в виде строковых значений. Дата должна быть возвращена как есть. Когда дата сериализуется, она имеет определенный формат и также содержит информацию о часовом поясе Javascript engine может использовать для определения правильной даты. – Chandermani

+0

, пожалуйста, укажите код ур –

+0

@chandermani Спасибо за ваш ответ, есть проблемы, связанные с обслуживанием, и его потребуется некоторое время, чтобы исправить это. Тем временем мы пытаемся исправить это в пользовательском интерфейсе. Мне было просто интересно понять это поведение JS-движка. –

ответ

0

Если вы используете AngularJS, как и в ваших тегах. Вы можете использовать $ filter, чтобы указать дату, как вы хотите. В вашем случае это будет:

$scope.datestring = $filter("date")(data.date, 'yyyy-MM-dd'); 

Более подробную информацию о $ фильтра (дата) вы можете найти here

EDIT:

Так что, если я правильно понимаю, у вас есть дата, которая говорит: 10- 12-2015, и вы хотите вывести его как 2015-10-12? Вы используете javascript datepicker для получения ваших дат или ...? Когда я поставил дату в с выбором даты дата выглядит следующим образом:

Mon Oct 12 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) 

Этих переменным называется: data.date. После этого я использую это, чтобы отфильтровать дату для ваших нужд, которая равна yyyy/MM/dd.

$scope.datestring = $filter("date")(data.date, 'yyyy/MM/dd'); 

И выход - 2015/10/12. Я не получаю никаких странных чисел :(

+0

Спасибо за фрагмент кода @Jelmer. Мы использовали фильтр $ filter в формате agnular для форматирования. Ниже приведен мой код-фильтр («дата») (новая дата (response.dateOfBirth), «yyyy-MM-dd»); Он работает нормально, если response.dateOfBirth - 08-11-1987. Если я прохожу 1987-08-11, то дата рождения пользователей уменьшится на 1. –

+0

Я отредактировал мой пост, не могли бы вы повторить его снова? ^^ – Jelmer

+0

Спасибо Jelmer. Проблема im сталкивается, когда я пытаюсь использовать ее с новой Date (date.date) в $ filter. Я нашел одно обходное решение с использованием regex, чтобы пропустить фильтр $, если вход уже соответствует требуемому формату. –

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