2017-09-13 124 views
1

我的代码Momentjs更改时区值

const startTime = '2017-09-12T09:00:00-04:00'; let s = moment(startTime); s.format()

这些线路输出'2017-09-12T13:00:00+00:00'

这些线路如何仍然可以得到输出为我以前的字符串? '2017-09-12T09:00:00-04:00'

我试着去通过文档,并使用utcOffset()s.utc().format()上计算器

我也履行按时添加操作,但似乎并不相关的“那一刻”看一些其他的答案后尝试。

+0

你开车的双关语我走 – WillB

回答

2

var startTime = '2017-09-12T09:00:00-04:00'; 
 
var s = moment.parseZone(startTime); 
 
s = s.add(1, 'd'); 
 
console.log(s.format()); //2017-09-13T09:00:00-04:00 
 

 
startTime = '2017-09-12T09:00:00+00:00'; 
 
s = moment.parseZone(startTime); 
 
console.log(s.format('YYYY-MM-DDTHH:mm:ssZ'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

片刻的字符串解析功能,如力矩(串)和moment.utc(串)接受,如果提供偏移信息,但转换导致Moment对象到本地或UTC时间。

相比之下,moment.parseZone()会解析字符串,但会将生成的Moment对象保留在固定偏移时区中,并使用字符串中提供的偏移量。

- Moment.js Docs

+0

这是我收到的最接近的答案。谢谢!但现在有一个问题,当我通过'2017-09-12T09:00:00 + 00:00'时,我得到'2017-09-12T09:00:00Z'' –

+0

Z是UTC UTC偏移的区域指示符。 +00:00等于'Z'。 – silverfox

+0

是一些选项,可以让我将它保持为+00:00? –

1

您需要在瞬间js中使用时区。

尝试使用这个,看看它是否显示了预期的效果:

s.tz('America/New_York').format() 

所有你需要做的就是在TZ方法,瞧提供正确的时区。

参考:https://momentjs.com/timezone/

var jun = moment("2014-06-01T12:00:00Z"); 
var dec = moment("2014-12-01T12:00:00Z"); 

jun.tz('America/Los_Angeles').format('ha z'); // 5am PDT 
dec.tz('America/Los_Angeles').format('ha z'); // 4am PST 

jun.tz('America/New_York').format('ha z');  // 8am EDT 
dec.tz('America/New_York').format('ha z');  // 7am EST 

jun.tz('Asia/Tokyo').format('ha z');   // 9pm JST 
dec.tz('Asia/Tokyo').format('ha z');   // 9pm JST 

jun.tz('Australia/Sydney').format('ha z');  // 10pm EST 
dec.tz('Australia/Sydney').format('ha z');  // 11pm EST 
+0

我的代码没有关于时区信息。我所得到的是字符串'2017-09-12T09:00:00-04:00' –

+0

即-04:00是时区。 –

+0

@DanielBeck是的,我想要一个解决方案,我不必解析字符串本身。 –