Изменяем GTM зону
Есть переменные $userTime = "03.09.2017 11:11:27" здесь я храню время в GMT 0 зоне.
Есть какое-то простой способ переконструировать его допустим в GTM +2 зону? Или сразу в зону клиента. Нашел примеры как это можно сделать с moment.js, но может есть какой-то другой постой вариант, без сторонних библиотек. |
у клиента вашего находящегося в другой таймзоне автоматом добавятся эти два часа если указано в GMT. В объекте date насколько я знаю нельзя в дальнейшем менять, если вы столько сразу не создали объект с нужной таймзоной.
|
dima85,
function utcToLocal(date) { var match = date.match(/\d+|\D+/g); date = Date.UTC(+match[4], match[2]-1, +match[0], +match[6], +match[8], +match[10]); date = new Date(date); match[0] = pad(date.getDate()); match[2] = pad(date.getMonth() + 1); match[4] = date.getFullYear(); match[6] = pad(date.getHours()); match[8] = pad(date.getMinutes()); match[10] = pad(date.getSeconds()); return match.join(''); function pad(number) { return number < 10 ? '0' + number : number; } } var $userTime = "03.09.2017 11:11:27"; alert($userTime + '\n' + utcToLocal($userTime)); |
Спасибо за пример Rise с разбором.
Но я думал это можно сделать как-то проще. Очень жаль. |
dima85,
Смысла нет хранить время в форматированном виде, чтобы затем переформатировать форматированное. В мире программирования в царстве дат и времен существует специальная зоно-формато-независимая величина - Unix timestamp, а точнее она всегда в зоне 0 или просто - UTC (также известное как GMT). В php она обычно в секундах, например вызов time() вернет ее, в js в миллисекундах, например date.getTime(). От отсутствия переформатирования станет проще, как на сервере, так и на клиенте, а при не строгом формате можно использовать метод toLocaleString: var $userTime = 1504437087000; alert(new Date(1504437087000).toLocaleString()); В старых браузерах формат вывода может отличаться, но с появлением стандарта интернационализации, все современные браузеры реализуют формат в более менее едином виде, который зависит от настроек локали клиента если не определены специальные параметры метода. Возможно этого вам будет достаточно. |
Часовой пояс GMT +3, время: 02:35. |