2015-08-07 3 views
1

У меня есть один веб-сайт, на котором у него есть функции для входа в определенный часовой пояс, независимо от того, какой часовой пояс на стороне клиента.Дата изменения JSON.stringify

Теперь, На веб-сайте, когда пользователь выбирает дату в диалоговом окне. Я отправляю его на сервер с помощью JSON.stringify с несколькими другими свойствами.

Но всякий раз, когда он принимается на стороне сервера, изменяется.

Пример: -

Я вошел в использовании (+05: 30) часовой пояс Индия "01/08/2015 00:00:00", и сервер, имеющий Касабланкскую часовой пояс.

Когда дата получена на стороне сервера, дата уменьшается на единицу «31/08/2015».

Я думаю, что из-за часовой пояс изменение.

Я уже проверил следующую ссылку: -

JSON Stringify changes time of date because of UTC

Я уже попробовал этот ответ: - https://stackoverflow.com/a/1486612/2592727

Но я не могу понять, как работает эта формула. Поэтому лучше получить более подробную информацию и работать с определенным решением.

Требование: -

Я позволяет пользователю выбрать только дату. Я хочу, чтобы дата была получена на стороне сервера.

Как я могу это сделать? Пожалуйста, опишите с более подробной информацией, если это возможно.

Есть ли какой-либо простой способ избежать этого столкновения?

+2

Просто убедитесь, что ваше значение даты является объектом строки так 'JSON.stringify' не трогать с грязными лапами. – Mouser

+0

Я не хочу передавать его как строку. Благодарю. Но, пожалуйста, любое другое решение. –

+1

Почему бы и нет, база данных будет на виду. – Mouser

ответ

1

Метод JSON.stringify хранится дата, как UTC в строке, и когда вы разбираете, что в .NET вы получите DateTime, который содержит тот же самый момент времени, но преобразуется в локальное время сервера.

Вы можете обработать это двумя способами: вы можете либо преобразовать время обратно в исходный часовой пояс, либо избежать использования типа данных Date.

Для правильного перевода в исходный часовой пояс необходимо знать, что такое часовой пояс. Пример:

var zone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(date.ToUniversalTime(), zone); 

Чтобы избежать использования Date типа, вы форматировать дату в строку, прежде чем serialising его.Пример:

var s = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(); 

На стороне сервера вы бы разобрать строку, используя тот же формат:

DateTime userTime = DateTime.ParseExact(date, "yyyy-M-d", CultureInfo.InvariantCulture); 
2

Используйте формат гггг-мм-дд чч: мм: сс, и вы никогда не получите это еще раз, независимо от часового пояса

Смежные вопросы