2010-09-23 4 views
5

У меня есть веб-сервис, который возвращает, например, объект DateTime: DepartureDate. Я использую Ajax, чтобы принести это и на мой взгляд, я преобразовать строку даты в формате JSON в JavaScript Object дату с помощью этой функции:Конвертировать даты JSON без часовой пояс

function convertToDate(jsonDate) { 
    return eval("new " + jsonDate.substring(1, jsonDate.length - 1)); 
} 

Проблема заключается в том, что new Date() занимает местное время на компьютере клиентов в рассмотрении, так клиенты в разных странах получают разные даты. Я хочу получить точную дату, которая была возвращена из webservice. Есть ли простой способ сделать это?

+0

, что значение переменной «jsonDate» –

+0

может быть, например, «/ Date (1285321800000) /» – knepe

ответ

6

Проблема заключается в том, что new Date() занимает местное время на компьютере клиентов с учетом

Неа. Создание новой даты с использованием конструктора timestamp принимает отметку времени UTC.

Например, на моей машине в UTC + 1:

new Date(0) // Thu Jan 01 1970 01:00:00 GMT+0100 (CET) 

ОК, по умолчанию toStringотображает эту дату 01:00:00, которая выглядит неправильно, но это на самом деле правильное время. 01:00:00 в UTC + 1 00:00:00 в UTC, который является моментом, описанным в timestamp 0.

Если вы хотите отобразить даты вы, создавая с отметки времени в формате UTC, используйте date.toUTCString() или выборку и форматирование consistuent части даты, используя getUTCFullYear(), getUTCMonth() и т.д.

Пожалуйста, хотя, не eval.

new Date(parseInt(jsonDate.slice(6, -1), 10)) 
+0

Спасибо за ваш великий ответ bobince. Я плохо разбираюсь в датах и ​​т. Д., Поэтому я мог бы не все понимать здесь, но я сделал то, что вы предложили, и это все тот же результат. Если я изменю свой часовой пояс на своей машине, время изменится (я хочу, чтобы они оставались неизменными независимо от того, в какое время вы находитесь, и они должны следовать часовой пояс АСТ.) – knepe

+0

Время * отображается * by 'toString()' изменяется для отражения ваш часовой пояс, но это не значит, что дата какая-то другая. 'new Date (1285321800000) .getUTCHours()' всегда '9', независимо от вашего часового пояса. Придерживайтесь функций 'getUTC ...' и 'setUTC ...', и дата будет вести себя так, как вы ожидаете. – bobince

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