Преобразование даты и времени UTC в локальное время
У меня есть переменная даты и времени, полученная с сервера в следующем формате: 6/29/2011 4:52:48 PM
, и она представлена в UTC. Мне нужно преобразовать это значение в текущий часовой пояс пользователя, использующего браузер.
Как это можно сделать с помощью JavaScript или jQuery?
5 ответ(ов)
Чтобы добавить 'UTC' в строку перед преобразованием ее в дату в JavaScript, вы можете использовать метод String.concat()
или просто конкатенацию строк. Тем не менее, на самом деле не обязательно добавлять 'UTC', так как конструктор Date
автоматически интерпретирует строки, содержащие информацию о временной зоне.
Вот пример кода, где мы добавляем 'UTC' к строке перед преобразованием:
var dateString = '6/29/2011 4:52:48 PM';
var utcDateString = dateString + ' UTC';
var date = new Date(utcDateString);
console.log(date.toString()); // "Wed Jun 29 2011 16:52:48 GMT+0000 (UTC)"
В результате date
будет представлять дату в формате UTC. Вывод содержит временную зону GMT+0000
, что указывает на то, что время является временем по всемирному координированному времени (UTC). Если вы хотите получить время в другом часовом поясе, вам нужно будет воспользоваться методами для работы с тайм-зонами.
На мой взгляд, серверы всегда должны возвращать дату и время в стандартизированном ISO 8601 формате.
Дополнительную информацию можно найти здесь:
В этом случае сервер будет возвращать значение '2011-06-29T16:52:48.000Z'
, которое можно напрямую использовать для создания объекта Date в JavaScript.
var utcDate = '2011-06-29T16:52:48.000Z'; // дата в формате ISO-8601, возвращенная с сервера
var localDate = new Date(utcDate);
Переменная localDate
будет содержать дату и время в правильном локальном формате, который, в моем случае, будет на два часа позже (время Дании).
Вам действительно не нужно проводить всякое парсинг, который только усложняет задачу, если вы будете последовательно использовать ожидаемый формат от сервера.
Это универсальное решение для конвертации даты из.UTC в локальное время:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
var offset = date.getTimezoneOffset() / 60;
var hours = date.getHours();
newDate.setHours(hours - offset);
return newDate;
}
Вот как использовать эту функцию:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
Чтобы отобразить дату в соответствии с локальными настройками клиента, используйте метод toLocaleString()
:
date.toLocaleString();
Таким образом, вы можете правильно отображать время, полученное в формате UTC, в зависимости от часового пояса пользователя.
Проблема, с которой вы столкнулись, распространена, особенно в Internet Explorer, где работа с UTC и локальным временем может быть немного запутанной. В вашем случае вы получили дату и время от веб-API в формате '2018-02-15T05:37:26.007'
и хотите преобразовать его в локальный часовой пояс.
Ниже приведённый код, который вы использовали:
var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
Добавление 'Z'
к строке даты сообщает JavaScript, что время указано в формате UTC. Это правильный подход для корректного преобразования во временную зону. После создания объекта Date
вы можете использовать методы, такие как toLocaleString()
, чтобы получить дату и время в формате вашего локального часового пояса.
Если данный способ не сработал или вы получили неправильный результат, убедитесь, что ваш браузер полностью поддерживает работу с объектом Date
и форматами времени. В Internet Explorer могут быть некоторые ограничения, и если вы хотите более точное поведение, рассмотрите возможность использования библиотеки, такой как Moment.js или date-fns, которые значительно упрощают работу с датами и временными зонами.
Если у вас есть дополнительные детали о том, как именно не сработал ваш код, пожалуйста, уточните, и я постараюсь помочь более конкретно!
Это решение работает для меня:
function convertUTCDateToLocalDate(date) {
return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);
}
В этой функции используется метод getTimezoneOffset()
, чтобы получить смещение временной зоны в минутах, которое затем преобразуется в миллисекунды для корректного offset. Таким образом, вы получаете локальную дату, соответствующую заданной UTC дате.
Как перенаправить на другую веб-страницу?
Прокрутка к элементу с использованием jQuery
Как определить нажатие клавиши Esc?
Удалить ВСЕ пробелы из текста
Как получить данные формы с помощью JavaScript/jQuery?