Преобразовать в строки JSON для изменения времени дату из-за мирового



мои объекты даты в JavaScript всегда представлены UTC +2 из-за того, где я нахожусь. Следовательно, такой



Mon Sep 28 10:00:00 UTC+0200 2009
701   10  

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

    Ничего не найдено.