Я хочу, чтобы сервер всегда отображал даты в формате UTC в формате HTML, а JavaScript-код на клиентском сайте преобразовывал его в местный часовой пояс пользователя.
Бонус, если я могу вывести в формате даты локали пользователя.
Я хочу, чтобы сервер всегда отображал даты в формате UTC в формате HTML, а JavaScript-код на клиентском сайте преобразовывал его в местный часовой пояс пользователя.
Бонус, если я могу вывести в формате даты локали пользователя.
Кажется, самый надежный способ начать с даты UTC - это создать новый Date
объект и использоватьsetUTC…
методы, чтобы установить для него желаемую дату / время.
Тогда различные toLocale…String
методы обеспечат локализованный вывод.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
toLocateDateString()
возвращает что-то похожее на «Воскресенье, 12 января 2014 года» ..var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
функциях.Для новых проектов просто используйте moment.js
Этот вопрос довольно старый, поэтому moment.js в то время не существовало, но для новых проектов он значительно упрощает подобные задачи.
Лучше всего проанализировать вашу строку даты из UTC следующим образом (создайте совместимую с ISO-8601 строку на сервере, чтобы получить согласованные результаты во всех браузерах):
Теперь просто используйте
m
в вашем приложении, moment.js по умолчанию использует местный часовой пояс для операций отображения. Есть много способов отформатировать значения даты и времени или извлечь их части.Вы даже можете отформатировать моментальный объект в локали пользователя следующим образом:
Чтобы преобразовать объект moment.js в другой часовой пояс (т. Е. Ни в локальный, ни в UTC), вам потребуется расширение time.js для часового пояса . На этой странице также есть несколько примеров, она довольно проста в использовании.
источник
For old projects, just use jQuery
Вы можете использовать
new Date().getTimezoneOffset()/60
для часового пояса. Также естьtoLocaleString()
способ отображения даты с использованием локали пользователя.Вот весь список: Работа с датами
источник
toLocaleString
?После того, как вы создали свой объект даты, вот фрагмент для преобразования:
Функция принимает отформатированный в формате UTC объект Date и строку формата.
Вам понадобится
Date.strftime
прототип.источник
getTimezoneOffset()/60
может вернуть дробь (например, смещение Индии +05: 30 вернет 5.5). Десятичные знаки усекаются. В противном случае установка часов обновляет другие значения (установите часы на 48 и посмотрите, что произойдет).В JS нет простых и кроссплатформенных способов форматирования локального времени даты, кроме преобразования каждого свойства, как упомянуто выше.
Вот быстрый взлом, который я использую, чтобы получить локальный YYYY-MM-DD. Обратите внимание, что это взлом, так как конечная дата не будет иметь правильный часовой пояс (поэтому вы должны игнорировать часовой пояс). Если мне нужно что-то еще, я использую moment.js.
D.getTimezoneOffset () возвращает смещение часового пояса в минутах, а d.getTime () - в мс, следовательно, x 60000.
источник
Вот что я использовал в прошлых проектах:
источник
getTimezoneOffset()/60
часто возвращают десятичное значение. Это особенно верно для дат до 1900 года, когда во многих местах были смещения в минутах и секундах. Кроме того, даты Javascript теперь необходимы для поддержки исторических смещений. Например, в 1890 году смещение в Москве составило +2: 30: 17. См. Браузеры, часовые пояса, Ошибка Chrome 67 ..getTimezoneOffset()
Метод сообщает смещение часового пояса в минутах, подсчет «запад» из временной зоны GMT / UTC, в результате чего значения смещения , что отрицательно к тому , что один обычно привык. (Например, время в Нью-Йорке будет составлять +240 минут или +4 часа)Чтобы получить нормальное смещение часового пояса в часах, вам нужно использовать:
Важная деталь:
обратите внимание, что переход на летнее время учитывается в результате - так что этот метод дает вам действительно смещение времени, а не фактическое географическое смещение часового пояса .
источник
С датой из кода PHP я использовал что-то вроде этого ..
Мы можем назвать это так
источник
Я до сих пор смешиваю ответы и добавляю их, потому что мне пришлось прочитать все из них и некоторое время дополнительно исследовать, чтобы отобразить строку даты и времени из db в формате локального часового пояса пользователя.
Строка datetime взята из базы данных python / django в формате: 2016-12-05T15: 12: 24.215Z
Надежное определение языка браузера в JavaScript, похоже, не работает во всех браузерах (см. JavaScript для определения предпочтений языка браузера ), поэтому я получаю язык браузера с сервера.
Python / Django: отправить язык браузера запроса в качестве параметра контекста:
HTML: напишите это в скрытом вводе:
JavaScript: получить значение скрытого ввода, например en-GB, en-US; q = 0,8, en; q = 0,6 /, а затем выбрать первый язык в списке только с помощью замены и регулярного выражения
JavaScript: преобразовать в datetime и отформатировать его:
Смотрите: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
Результат (язык браузера en-gb): 12.05.2016, 14:58
источник
источник
options
часть для моего случая)Лучшее решение, с которым я столкнулся, - это создать теги [time display = "llll" datetime = "UTC TIME" /] и использовать javascript (jquery) для анализа и отображения его относительно времени пользователя.
http://momentjs.com/ Moment.js
будет отображать время красиво.
источник
Вы можете использовать следующее, которое сообщает смещение часового пояса от GMT в минутах:
Примечание: - эта функция возвращает отрицательное число.
источник
getTimeZoneOffset () и toLocaleString хороши для базовой работы с датами, но если вам нужна поддержка реального часового пояса, посмотрите mde's TimeZone.js .
В ответе на этот вопрос обсуждается еще несколько вариантов.
источник
Чтобы преобразовать дату в локальную дату, используйте метод toLocaleDateString ().
Чтобы преобразовать время в местное время, используйте метод toLocaleTimeString ().
источник
Не знаю, как сделать локаль, но javascript - это технология на стороне клиента.
будет иметь время и дату клиента (как сообщается их браузером и, соответственно, компьютером, на котором они сидят). Это должно быть тривиально, чтобы включить время сервера в ответ и сделать некоторую простую математику, чтобы угадать смещение.
источник