Я должен отобразить строку на веб-странице в следующем формате: 16:00 HH:mm

Я использую объект момента для представления даты / времени и часового пояса.

var day = moment().tz('GMT');
day.hours(16).minutes(0).seconds(0).milliseconds(0);

Так что это 16:00 по Гринвичу.

На своей веб-странице я хочу изменить часовой пояс, а затем собрать часы и минуты.

Если я сделаю новый момент объекта

var day2 = moment().tz('PST); //this is 8 AM since gmt was 16
console.log(day2.get('hours'));

Это 16 не 8!

И попытайтесь получить часы и минуты, которые они в GMT, а не в PST.

Как я могу получить его в PST? Я должен продолжать оборачивать это?

4
user1261710 17 Дек 2015 в 02:37

3 ответа

Лучший ответ
// initialize a new moment object to midnight UTC of the current UTC day
var m1 = moment.utc().startOf('day'); 

// set the time you desire, in UTC
m1.hours(16).minutes(0);

// clone the existing moment object to create a new one
var m2 = moment(m1);   // OR  var m2 = m1.clone();   (both do the same thing)

// set the time zone of the new object
m2.tz('America/Los_Angeles');

// format the output for display
console.log(m2.format('HH:mm'));

Рабочая jsFiddle здесь.

Если вы не можете заставить его работать, значит, вы неправильно загрузили момент, часовой пояс и требуемые данные часового пояса. Для получения данных вам необходимо либо вызвать moment.tz.add с данными о зонах, которые вам нужны, либо использовать один из файлов момента-времени-зоны-с-данными, доступных на сайте.

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

fiddle resources

4
Matt Johnson-Pint 17 Дек 2015 в 04:00

Я не знаю, как использовать момент.js, но использовать POJS довольно просто, и тот же алгоритм должен работать. Просто вычтите 8 часов из времени UTC объекта даты и верните отформатированную строку на основе скорректированного времени UTC.

Предполагая, что PST - это «Тихоокеанское стандартное время», также известное как «Тихоокеанское время» (PT), и это UTC -8: 00:

/* @param {Date} date - input date object
** @returns {string} - time as hh:mm:ss
**
** Subtract 8 hours from date UTC time and return a formatted times string
*/
function getPSTTime(date) {
  var d = new Date(+date);
  d.setUTCHours(d.getUTCHours() - 8);
  return ('0' + d.getUTCHours()).slice(-2) + ':' +
         ('0' + d.getUTCMinutes()).slice(-2) + ':' +
         ('0' + d.getUTCSeconds()).slice(-2);
}

document.write('Current PST time: ' + getPSTTime(new Date));

Существует момент-часовой пояс, который добавляет функциональность в moment.js для часовые пояса IANA. Для PST вы можете использовать America / Los_Angeles, однако он также может автоматически настраиваться на летнее время, поэтому вы получите PDT, когда это применимо. Если вы хотите игнорировать переход на летнее время, воспользуйтесь приведенным выше или найдите местоположение со смещением, которое вам необходимо, и используйте его.

0
RobG 17 Дек 2015 в 00:44

PST может означать разные вещи в разных регионах. В документах о времени и часовых поясах я не вижу ничего, относящегося к «PST» или подобным аббревиатурам.

Возможно, попробуйте:

var day2 = moment().tz('PST'); 
// 16 with Error: Moment Timezone has no data for PST. See http://momentjs.com/timezone/docs/#/data-loading/.

var day2 = moment().tz('America/Los_Angeles'); 
// 15
1
STLMikey 16 Дек 2015 в 23:50