У меня есть datepicker, с которой я получаю и установка даты (которая затем сериализуется в JSON с помощью json2.js, используя следующий код:Надежный метод кросс-браузер установки и получения даты в datpicker
$('#element').datepicker('getDate'); // returns 2012-03-19T00:00:00.000Z
$('#element').datepicker('setDate', value);
к сожалению, однако, это устанавливает значение даты в datpicker к 30/08/2017
под Firefox v11 (который до сих пор не так, я понятия не имею, где его получение этого значения из) и NaN/NaN/NaN
под IE9.
Я попытался изменить вторую чтобы быть следующим:
$('#element').datepicker('setDate', new Date(value));
Это работает в Firefox, однако я все равно получаю тот же результат в IE9.
Я тогда немного пошатнулся и начал пытаться использовать строковые манипуляции, чтобы писать и анализировать даты в другом формате, надеясь, что я смогу надежно получить простой сценарий записи/разбора, чтобы работать, но это закончилось тем, будучи намного большим количеством кода, чем я ожидал, - в сочетании с тем, что мне нужно учитывать часовые пояса (в некоторых часовых поясах я могу получить что-то вроде 2012-03-18T23:00:00.000Z
за 2012-03-20, то есть компонент даты указывает дату предыдущего) моя уверенность в настоящее время пошатнута, поскольку важно, что это работает во времени и в браузерах.
Есть ли надежный способ сделать это простым сэкономить на нагрузке JSON от JSON безопасно?
- Я забочусь только о компоненте дате, а не компонент времени
- Сам формат даты не имеет значения до тех пор, как он недвусмысленно указывает дату (например, я хотел бы избежать 01/01/2012 из-за двусмысленности между датами США и Великобритании). Было бы неплохо, если бы это было понятно для человека, но если это имеет значение между тем, что он работает, и я бы предпочел, чтобы он работал!
Поправьте меня, если я ошибаюсь, но я думал, что [GetDate] (HTTP: //jqueryui.com/demos/datepicker/#method-getDate) возвращает объект Date. Оттуда вам нужно соответствующим образом отформатировать, toString() не вариант. В будущем вы должны использовать [toISOString()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString), но прямо сейчас вам нужно использовать что-то еще, то есть использовать getUTCFullYear(), getUTCMonth() и т. д. для преобразования даты в формат ISO8601. Возможно, есть и сценарий для этого, но я не могу дать вам имя сейчас. –
@ PawełDyda Да, но 'getUTCFullYear()' и т. Д. Не делают трюк - для определенных часовых поясов, которые просто дают мне вчерашнюю дату. Мне также нужно учитывать компонент времени. Я также не уверен, какой формат использовать - приведенные выше примеры относятся к ISO 8601, но я все еще вижу много проблем, анализируя их. Я мог бы написать свой собственный синтаксический анализатор даты, однако я хочу сказать, что это ** много усилий для особо простого случая использования. Должен быть лучший способ! – Justin
Методы getUTC *() дают вам фактическое время в UTC. Смещение временной зоны, конечно, переносит это на другую дату/время, но это нормально, если вы не хотите иметь сегодняшнюю полночь в данном часовом поясе. В этом случае вы можете либо добавить смещение часового пояса к строке ISO8601 (вместо «Z», что означает «Zulu», то есть UTC) или использовать getFullYear(), getMinute() и т. Д., Которые дадут вам дату/время в локальном часовом поясе (в этом случае вам нужно будет добавить временное смещение). –