2016-04-27 5 views
0

私は現地時間をmongodbに保存しています。 "2016-04-25T09:30:00.000Z" 「UTC」(最後はZ)として保存されていますが、実際には現地時間のリテラル表現です。私はタイムゾーンも保存しています。 "Europe/London"だから私は正しいutc時間に変換するために必要なすべての情報を持っています。UTCとして保存された現地時間を実際の正しいUTC値に変換する方法

その結果が "2016-04-25T08:30:00.000Z"になるはずですが、どうやってその方法を見つけることができません。私は瞬間タイムゾーンを試しました。

答えて

0

見つけました!

var start = "2016-04-25T09:30:00.000Z"; 
var timezone = 'Europe/London'; 
var mZoned = moment.tz(start, timezone); 
var mStart = moment.utc(start); 
var correctedStart = moment.utc(1000*(mStart.unix() - (mZoned.utcOffset()*60))); 
2

エラーが発生しやすい方法があります。単純に終わりZを無視する形式で日付を解析:

moment.tz("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS', 'Europe/London').format() 
"2016-04-25T09:30:00+01:00" 

日付が正しく解析された、UTCの日付を得ることが.toISOStringを(呼び出すのと同じくらい簡単です)

moment.tz("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS', 'Europe/London').toISOString() 
"2016-04-25T08:30:00.000Z" 

注意それは地元の日付である場合は、関係なく、タイムゾーンの、あなたはタイムゾーン識別子を省略することができ、ちょうどブラウザのローカル時間を使用している:

moment("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS').format() 
"2016-04-25T09:30:00-05:00" 

しかし、私は、あなたがしていることを考えますNodeを使用して、2番目のものがおそらくあなたが望むものではないようにします。

+0

チップ@Maggieありがとう! – matus

1

私はこの問題が000Z zone for moment libを指定する形式だと信じています。このような場合、それはすでにUTC 0であり、timezone = 'Europe/London'は無視されます。

moment.utc(moment(start).tz(timezone)).format() 

は、日付形式"2016-04-25T09:30:00"で正しく動作しています。 実行可能なバージョンを確認してくださいhere

関連する問題