2017-09-13 126 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是的,我想要一個解決方案,我不必解析字符串本身。 –