5

Преобразование даты и времени UTC в локальное время

14

У меня есть переменная даты и времени, полученная с сервера в следующем формате: 6/29/2011 4:52:48 PM, и она представлена в UTC. Мне нужно преобразовать это значение в текущий часовой пояс пользователя, использующего браузер.

Как это можно сделать с помощью JavaScript или jQuery?

5 ответ(ов)

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). Если вы хотите получить время в другом часовом поясе, вам нужно будет воспользоваться методами для работы с тайм-зонами.

3

На мой взгляд, серверы всегда должны возвращать дату и время в стандартизированном 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 будет содержать дату и время в правильном локальном формате, который, в моем случае, будет на два часа позже (время Дании).

Вам действительно не нужно проводить всякое парсинг, который только усложняет задачу, если вы будете последовательно использовать ожидаемый формат от сервера.

1

Это универсальное решение для конвертации даты из.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, в зависимости от часового пояса пользователя.

0

Проблема, с которой вы столкнулись, распространена, особенно в 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, которые значительно упрощают работу с датами и временными зонами.

Если у вас есть дополнительные детали о том, как именно не сработал ваш код, пожалуйста, уточните, и я постараюсь помочь более конкретно!

0

Это решение работает для меня:

function convertUTCDateToLocalDate(date) {
    return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);   
}

В этой функции используется метод getTimezoneOffset(), чтобы получить смещение временной зоны в минутах, которое затем преобразуется в миллисекунды для корректного offset. Таким образом, вы получаете локальную дату, соответствующую заданной UTC дате.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь