Как преобразовать время по Гринвичу в локальное время пользователя Javascript

Я пытаюсь преобразовать время по Гринвичу в местное время пользователя.

формат времени, который я получаю с сервера: 2015-05-20 18:00:00 GMT

Я просто хочу показывать часы и минуты вот так: 20:00

Я хотел использовать это решение, которое кажется довольно простым, но я не знаю, как сделать мой формат таким же, как этот.

var date = new Date('5/21/2015 18:52:48');
date.toString();

person Yasser B.    schedule 21.05.2015    source источник
comment
Где/как вы получаете дату в первую очередь?   -  person T.J. Crowder    schedule 21.05.2015
comment
возможный дубликат Преобразование даты и времени UTC в местное время, используя JavaScript   -  person Laxmikant Dange    schedule 24.05.2015


Ответы (3)


формат времени, который я получаю с сервера: 2015-05-20 18:00:00 GMT

Если это так, вы можете легко преобразовать его в формат, поддерживаемый браузерами ES5 и более поздних версий должны поддерживать, что в вашем примере будет 2015-05-20T18:00:00Z:

var yourString = "2015-05-20 18:00:00";
var dt = new Date(yourString.replace(' ', 'T') + "Z");
var hours = dt.getHours(); // Will be local time
var minutes = dt.getMinutes(); // Will be local time

Затем просто отформатируйте полученные значения hours и minutes в нужную строку hh:mm.


Примечание. Z в конце строки имеет важное значение. К сожалению, в спецификации ES5 есть существенная ошибка (они исправляют ее в ES6) относительно того, что должен делать движок, если в анализируемой строке нет часового пояса. Некоторые движки делают то, что говорит спецификация, другие делают то, что должно говорить спецификация (и спецификация ES6 будет говорить), что, к сожалению, означает, что прямо сейчас вы не можете доверяйте тому, что будут делать браузеры, если в строке нет часового пояса.

person T.J. Crowder    schedule 21.05.2015

Мне просто нужно было добавить "UTC"

 var date = new Date('2015-05-20 15:00:00 UTC');
alert(date.getHours());
    alert(date.getMinutes());
person Yasser B.    schedule 21.05.2015
comment
Этот формат даты/времени может работать или не работать в любом конкретном браузере, так как он не указан в спецификации, и если он похоже работает, он может фактически использовать или не использовать UTC, а не местное время. при разборе. Я бы не стал на это полагаться. - person T.J. Crowder; 21.05.2015

new Date() в браузере возвращает объект даты в часовом поясе пользователя (часовой пояс компьютера). Просто вам нужно передать дату по Гринвичу в функцию даты в формате ISO. Таким образом, он будет рассматривать его как время по Гринвичу.

var date = new Date('2015-05-21T18:52:48Z');
date.toString();//You will get here date string in local format

Вы также можете использовать UTC, поскольку UTC и GMT являются такой же.

Вот экс.

var date = new Date('2015-05-21 18:52:48UTC'); //You can use GMT instead UTC
date.toString();//You will get here date string in local format

Первый способ предпочтительнее, так как второй метод не работает в Internet Explorer

person Laxmikant Dange    schedule 21.05.2015