angularjs - путаница с форматами даты - PullRequest
0 голосов
/ 25 апреля 2018

Я очень запутался с форматами даты и нуждаюсь в некоторых разъяснениях. Я пытаюсь предварительно заполнить форму датой и установить $ scope.selectedDate = c.data.Appt.enrolled.start_date;

В моей консоли c.data.Appt.enrolled.start_date представляет собой строку:

enter image description here

Однако, когда я установил $ scope.selectedDate, ничего не появляется.

И наоборот, если я добавлю новую дату впереди

(new Date(c.data.Appt.enrolled.start_date))

дата появляется, но за день до этого (24 апреля 2018 г.).

В дополнение к этому, когда я пытаюсь вставить «новую дату» версию в функцию (даже если это не правильная дата), я получаю предупреждение в консоли, говорящее «Конструкция момента возвращается к js Date . Это не рекомендуется и будет удалено в следующем основном выпуске. "

Может ли кто-нибудь объяснить, как мне следует форматировать даты, чтобы я: 1) получил правильную дату, а не за день до этого и 2) смог подключить ее к функции без получения этого предупреждения?

Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

Поскольку дата является строкой без информации о часовом поясе (только дата), JavaScript-анализатор дат будет рассматривать ее как универсальное (по Гринвичу, время по Гринвичу) время при 00:00 часах.Затем он вычтет смещение часового пояса вашей локали в часах и приведет к тому, что дата будет на несколько часов раньше или позже того дня, который вы на самом деле хотите.Это частая путаница.

Лучший способ решить эту проблему - это проанализировать дату вручную:

function localDate(dateString) {
  var d = dateString.split(/\D/);
  return new Date(d[0], d[1]-1, d[2]);
}

См. Этот вопрос для получения дополнительной информации: Javascript: parse astring to Date в виде МЕСТНОГО часового пояса

Moment.js выдает это предупреждение, потому что считается плохой практикой полагаться на синтаксический анализ строки, который делает new Date(), поскольку он будет иметь разные результаты в разных браузерах (IE \Firefox \ Etc.).Для создания даты удобнее использовать браузер, используя эту форму: new Date(year, month, day).(Обратите внимание, что месяц начинается с нуля, а не с 1)

...