2016-03-29 4 views
2

Если вы изменили часовой пояс на (UTC-07: 00) Mountain Time и запустили код ниже, вы можете увидеть проблему, о которой я говорю.Дата форматирования в указанном часовом поясе с использованием Moment Timezone

var a = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format(); 
 
var b = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format('YYYY-MM-DD HH:mm'); 
 
var c = moment('2009-10-31T23:00:00-07:00').format('YYYY-MM-DD HH:mm'); 
 

 
document.getElementById("a").innerHTML = "#1: " + a; 
 
document.getElementById("b").innerHTML = "#2: " + b; 
 
document.getElementById("c").innerHTML = "#3: " + c;
<script src="http://momentjs.com/downloads/moment.min.js"></script> 
 
<script src="http://momentjs.com/downloads/moment-timezone-with-data-2010-2020.min.js"></script> 
 
<div id="a"></div> 
 
<div id="b"></div> 
 
<div id="c"></div>

Дата смещения производится путем запуска кода (# 1) выше, является правильным. Однако не следует форматировать его значение «2009-11-01 00:00» (№ 3) вместо «2009-10-31 23:00» (№ 2)?

Похоже, что форматировщик просто удаляет смещение вместо того, чтобы принимать во внимание при создании форматированной даты. Является ли это ошибкой, или я делаю что-то неправильно здесь?

+0

Предположительно на горы времени вы имеете в виду GMT-07: 00. Хотя синтаксический анализ строк конструктором Date не рекомендуется, большинство из них будет правильно разбирать эту строку (но некоторые из них не будут). В любом случае, кажется, ваша система настроена на GMT-06: 00, поэтому, когда вы печатаете дату, по умолчанию используется локальный (хост-система) часовой пояс, который на один час позже ввода. – RobG

ответ

3

Вы используете moment-timezone-with-data-2010-2020.min.js с 2009 годом. Вам необходимо изменить Moment Timezone на moment-timezone-with-data.min.js. См рабочий фрагмент кода:

var a = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format(); 
 
var b = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format('YYYY-MM-DD HH:mm'); 
 
var c = moment('2009-10-31T23:00:00-07:00').format('YYYY-MM-DD HH:mm'); 
 

 
document.getElementById("a").innerHTML = "#1: " + a; 
 
document.getElementById("b").innerHTML = "#2: " + b; 
 
document.getElementById("c").innerHTML = "#3: " + c;
<script src="http://momentjs.com/downloads/moment.min.js"></script> 
 
<script src="http://momentjs.com/downloads/moment-timezone-with-data.min.js"></script> 
 
<div id="a"></div> 
 
<div id="b"></div> 
 
<div id="c"></div>

Смежные вопросы