JavaScript Дата объекта всегда печатается в Америке / часовой пояс New_York? - PullRequest
2 голосов
/ 22 сентября 2011

У меня есть метка времени в миллисекундах ( Время / время Unix из эпохи ), отправленная с моего сервера, которая использует время Joda и всегда постоянный часовой пояс " America / New_York ». На моем клиенте я также хочу гарантировать, что время отображается в соответствии с часовым поясом America / New_York . Я использовал документацию MDN Date и решил, что проще всего создавать экземпляры объектов Date, используя новый конструктор Date ( milliseconds ).

Теперь сложная часть: Я хочу иметь возможность печатать время для клиентов, которые используют мой сайт за пределами часового пояса Америки / Нью-Йорка. Я знаю, что могу getTimezoneOffset из Date object, так что теперь я рассматриваю возможность выполнения арифметики для этого объекта на основе смещения и полагаюсь на сервер, чтобы сказать мне, находится ли я в DST или нет. Используя этот метод из библиотеки Joda Time .

Мне бы хотелось решение, которое работает как в IE8, так и в современных браузерах. Какие-нибудь мысли? Есть ли какие-нибудь небольшие утилиты, которые уже выполняют это стандартным способом?

// dateTimeAsString is sent from the server (via JSON) as a String
// dateTimeAsString example: "1311387300000"
var dateTimeAsInt = parseInt(dateTimeAsString,10);
var dateTimeInNY = new Date(dateTimeAsInt);

// My current offset is 240
var nyOffset = dateTimeInNY.getTimezoneOffset();

// Somewhere out west
var dateTimeInTexas = new Date(dateTimeAsInt);


var isDST = false; // sent from server


// What I want to do, this is not legal JavaScript
dateTimeInTexas.printWithOffset(isDST,nyOffset);

1 Ответ

2 голосов
/ 22 сентября 2011

Браузеры не имеют информации о часовом поясе. Они могут отображаться только в UTC и в текущем часовом поясе ОС. Даже не гарантируется, что у клиента есть какие-либо сведения о часовом поясе «Америка / Нью-Йорк» (например, плохое, слабое мобильное устройство).

Если вы хотите отобразить даты в определенном часовом поясе, проще всего преобразовать их в форматированную строку и передать в виде строки, а не миллисекунд.

Если вам нужно сделать некоторые календарные вычисления на стороне клиента, вам не повезло ... Вы должны сделать это вручную.

Кстати, вы не можете использовать timezoneOffset как есть, потому что он может отличаться для определенных дат, DST также важен.

Итак, прежде всего. Что вы хотите сделать с датами на стороне клиента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...