10 ответов:
недавно я столкнулся с такой же проблемой. И это было решено с помощью следующего кода:
x = new Date(); x.setHours(x.getHours() - x.getTimezoneOffset() / 60);
JSON использует
Date.prototype.toISOStringфункция, которая не представляет местное время - она представляет время в немодифицированном UTC - если вы посмотрите на свой вывод даты, вы можете увидеть, что вы находитесь в UTC+2 часа, поэтому строка JSON изменяется на два часа, но если это позволяет правильно представлять одно и то же время в нескольких часовых поясах.
просто для записи, помните, что последний "Z" в "2009-09-28T08:00:00Z" означает, что время действительно находится в UTC.
см.http://en.wikipedia.org/wiki/ISO_8601 для деталей.
вот еще один ответ (и лично я думаю, что это более уместно)
var currentDate = new Date(); currentDate = JSON.stringify(currentDate); // Now currentDate is in a different format... oh gosh what do we do... currentDate = new Date(JSON.parse(currentDate)); // Now currentDate is back to its original form :)
Я немного опоздал, но вы всегда можете перезаписать функцию toJson в случае даты, используя прототип следующим образом:
Date.prototype.toJSON = function(){ return Util.getDateTimeString(this); };в моем случае, Util.getDateTimeString (this) возвращает строку следующим образом: "2017-01-19T00:00:00Z"
дата.toJSON () печатает UTC-дату в строковом формате (поэтому добавляет смещение с ним при преобразовании его в формат JSON).
date = new Date(); new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();
обычно вы хотите, чтобы даты были представлены каждому пользователю в его собственное местное время -
именно поэтому мы используем GMT (UTC).
Дата Использования.parse(jsondatestring), чтобы получить строку местного времени,
Если вы хочу ваше местное время показано каждому посетителю.
в таком случае используйте метод Анатолия.
обойти эту проблему с помощью
moment.jsбиблиотека (версия без часового пояса).var newMinDate = moment(datePicker.selectedDates[0]); var newMaxDate = moment(datePicker.selectedDates[1]); // Define the data to ask the server for var dataToGet = {"ArduinoDeviceIdentifier":"Temperatures", "StartDate":newMinDate.format('YYYY-MM-DD HH:mm'), "EndDate":newMaxDate.format('YYYY-MM-DD HH:mm') }; alert(JSON.stringify(dataToGet));я использовал
flatpickr.min.jsбиблиотека. Время создания результирующего объекта JSON совпадает с предоставленным локальным временем,но с выбором даты.
все сводится к тому, является ли ваш серверный сервер часовым поясом-агностическим или нет. Если это не так, то вам нужно предположить, что часовой пояс сервера совпадает с клиентом, или передать информацию о часовом поясе клиента и включить ее также в расчеты.
пример бэкэнда PostgreSQL:
select '2009-09-28T08:00:00Z'::timestamp -> '2009-09-28 08:00:00' (wrong for 10am) select '2009-09-28T08:00:00Z'::timestamptz -> '2009-09-28 10:00:00+02' select '2009-09-28T08:00:00Z'::timestamptz::timestamp -> '2009-09-28 10:00:00'последнее, вероятно, то, что вы хотите использовать в базе данных, если вы не хотите правильно реализовать логику часового пояса.
вместо
toJSON, вы можете использовать формат функция, которая всегда дает правильную дату и время +GMTЭто самый надежный вариант дисплея. Он принимает строку маркеров и заменяет их соответствующими значениями.
Comments