Тип ввода HTML datetime-local установка неправильного часового пояса

Я создал приложение, которое принимает входные данные HTML и проходит через JavaScript, чтобы создать событие в событиях собственного календаря. Это занимает время от <input type="datetime-local">и он вводит другое время, потому что выбирает другой часовой пояс. Если я введу 1:00 вечера как время, он вернется 8:00 утра.

<input type="datetime-local" id="startDate" name="startDate">

И JavaScript:

var startDate = new Date($("#startDate").val());

Любая помощь будет потрясающей. Я могу опубликовать больше кода, если это необходимо.

1 ответ

Решение

HTML5 datetime-local Тип ввода вернет вам строковое значение, которое содержит дату и время в формате ISO8601, с точностью до минуты и без какого-либо смещения часового пояса.

Например: 2014-07-12T01:00

JavaScript Объект даты, как известно, непоследователен, когда дело доходит до разбора дат из строк. В большинстве реализаций, когда вы предоставляете строку, подобную этой, ошибочно предполагается, что значение указано в UTC. Следовательно Date Возвращаемый объект будет скорректирован по смещению часового пояса вашего локального компьютера.

Есть два подхода к решению проблемы:

Опция 1

Манипулируйте строкой в ​​формате, который, вероятно, будет интерпретирован как местное время Date парсер объекта. Конкретно заменить тире (-) с косой чертой (/) и заменить T с пробелом.

var s = $("#startDate").val();
var startDate = new Date(s.replace(/-/g,'/').replace('T',' '));

Вариант 2

Используйте библиотеку с более широкими возможностями анализа дат. Есть несколько доступных. Одним из самых популярных является moment.js.

Moment.js имеет много опций, но так получилось, что поведение по умолчанию именно то, что вам нужно. Таким образом, вы можете просто передать строку в конструктор момента без каких-либо параметров.

var s = $("#startDate").val();
var startDate = moment(s).toDate();
Другие вопросы по тегам