Отображение даты / времени в формате локали пользователя и смещения времени - PullRequest
151 голосов
/ 17 сентября 2008

Я хочу, чтобы сервер всегда отображал даты в формате UTC в формате HTML, а JavaScript-код на клиентском сайте преобразовывал его в местный часовой пояс пользователя.

Бонус, если я могу вывести в формате даты локали пользователя.

Ответы [ 15 ]

2 голосов
/ 17 сентября 2008

Вы можете использовать следующее, которое сообщает смещение часового пояса от GMT в минутах:

new Date().getTimezoneOffset();

Примечание: - эта функция возвращает отрицательное число.

1 голос
/ 21 февраля 2019

// new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]])
var serverDate = new Date(2018, 5, 30, 19, 13, 15); // just any date that comes from server
var serverDateStr = serverDate.toLocaleString("en-US", {
  year: 'numeric',
  month: 'numeric',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric'
})
var userDate = new Date(serverDateStr + " UTC");
var locale = window.navigator.userLanguage || window.navigator.language;

var clientDateStr = userDate.toLocaleString(locale, {
  year: 'numeric',
  month: 'numeric',
  day: 'numeric'
});

var clientDateTimeStr = userDate.toLocaleString(locale, {
  year: 'numeric',
  month: 'numeric',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric'
});

console.log("Server UTC date: " + serverDateStr);
console.log("User's local date: " + clientDateStr);
console.log("User's local date&time: " + clientDateTimeStr);
1 голос
/ 17 сентября 2008

getTimeZoneOffset () и toLocaleString хороши для базовой работы с датами, но если вам нужна поддержка реального часового пояса, посмотрите на mde's TimeZone.js .

В ответе на этот вопрос обсуждается еще несколько вариантов

0 голосов
/ 10 июля 2018

Чтобы преобразовать дату в локальную дату, используйте метод toLocaleDateString ().

var date = (new Date(str)).toLocaleDateString(defaultlang, options);

Чтобы преобразовать время в местное время, используйте метод toLocaleTimeString ().

var time = (new Date(str)).toLocaleTimeString(defaultlang, options);
0 голосов
/ 17 сентября 2008

Не знаю, как сделать локаль, но javascript - это технология на стороне клиента.

usersLocalTime = new Date();

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

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