Получение момента времени. Js, чтобы показать даты, соответствующие просмотру информации
Предыдущие ответы здесь указали мне на moment.js для обработки дат javascript, и я очень рад ее найти. Я могу хорошо разбираться и манипулировать.
Пользователи на моем веб-сайте просматривают информацию, относящуюся к различным физическим сайтам/местоположениям, и я хочу показать связанные с ней даты в то время, когда это место, а не местоположение пользователя.
Каждый физический сайт имеет строку атрибута часового пояса, такую как "Европа/Лондон" или "Европа/Амстердам"
Мои даты сохраняются и доставляются из базы данных в формате UTC.
Есть ли простой способ сделать мой объект moment.js в любой заданный часовой пояс?
Ответы
Ответ 1
Теоретически вы можете сделать что-то вроде этого.
moment.fn.formatInZone = function(format, offset) {
return this.clone().utc().add('hours', offset).format(format);
}
moment().formatInZone('HH:mm:ss', 7);
moment().formatInZone('HH:mm:ss', -7);
Однако для этого требуется, чтобы вы знали правильное смещение, поэтому оно не учитывает летнее время.
Ответ 2
Если вы хотите отображать даты в ДРУГОЙ часовой пояс, чем пользователь на самом деле, то вам нужно начать поиск таких вещей, как https://bitbucket.org/pellepim/jstimezonedetect (если вам нужно определить, в каком часовом поясе находится пользователь) и https://github.com/mde/timezone-js, если вам нужно локализовать даты между зонами.
jsTimezoneDetect, с которым я связан выше, поможет вам составить краткий список соответствующих часовых поясов.
То, что у вас есть ваши данные, хранящиеся в UTC, сделают это довольно простым для вас благодаря mde/timezone-js.
Ответ 3
В node.js это на самом деле довольно просто, используя node -time (https://github.com/TooTallNate/node-time). Переопределите глобальный объект Date, а затем увеличьте moment.js:
var time = require('time')(Date),
moment = require('moment');
moment.fn.setTimezone = function(timezone, relative) {
this.toDate().setTimezone(timezone, relative);
return this;
}
moment.fn.getTimezone = function() {
return this.toDate().getTimezone();
}
Для хорошей меры вставьте функцию полезности для преобразования "входящих" строк даты/времени в UTC:
moment.fromTimezone = function(datetime, timezone) {
return moment(datetime, "YYYY-MM-DD HH:mm").setTimezone(timezone, true).setTimezone("UTC");
}
И вы можете сделать это:
var fmt = "YYYY-MM-DD HH:mm",
datetime = "2013-03-21 00:40",
timezone = "Israel",
m = moment.fromTimezone(datetime, timezone);
console.log(datetime, "in", timezone, "is", m.format(fmt), "in UTC");
console.log(m.format(fmt), "in UTC is", m.setTimezone(timezone).format(fmt), "in", m.getTimezone());
Выход оболочки:
$ node mtz.js
2013-03-21 00:40 in Israel is 2013-03-20 22:40 in UTC
2013-03-20 22:40 in UTC is 2013-03-21 00:40 in Israel
$