2017-09-22 20 views
0

モーメントオブジェクトはタイムゾーンを変換しません。私は日付と時刻のオブジェクトをUTCに変換しようとしていますが、元の日付/時刻をそのまま返します。誰がなぜこれが起こっているのか知っていますか? _dによるものではないにもかかわらず、元の時刻をUTCと仮定しているようですね。モーメントタイムゾーン変換が機能しない

momentPre = moment(post.date + " " + post.time + "00", "YYYY-M-D HH:mm:ss") 
momentAft = momentPre.toISOString() 
momentParse = moment.tz(momentAft, 'America/Denver') 
post.utcDate = momentParse.clone().tz("UTC")._i.substring(0,10) 

momentParseオブジェクト出力(_isUTCをテストし、問題を修正doesntの前に、私はこれをfalseに余儀なくされていないにもかかわらず、trueを返します。):momentParse.clone(から

{ [Number: 1506010200000] 
    _isAMomentObject: true, 
    _i: '2017-09-21T16:10:00.000Z', 
    _f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ', 
    _tzm: 0, 
    _isUTC: true, 
    _pf: 
    { empty: false, 
    unusedTokens: [], 
    unusedInput: [], 
    overflow: -1, 
    charsLeftOver: 0, 
    nullInput: false, 
    invalidMonth: null, 
    invalidFormat: false, 
    userInvalidated: false, 
    iso: true }, 
    _locale: Locale { ordinal: [Function], _abbr: 'en' }, 
    _a: [ 2017, 8, 21, 16, 10, 0, 0 ], 
    _d: Thu Sep 21 2017 04:10:00 GMT-0600 (MDT), 
    _z: 
    { name: 'America/Denver', 
    abbrs 
    ... 

出力) .tz( "UTC")

{ [Number: 1506010200000] 
    _isAMomentObject: true, 
    _i: '2017-09-21T16:10:00.000Z', 
    _f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ', 
    _tzm: 0, 
    _isUTC: true, 
    _offset: 0, 
    _pf: 
    { empty: false, 
    unusedTokens: [], 
    unusedInput: [], 
    overflow: -1, 
    charsLeftOver: 0, 
    nullInput: false, 
    invalidMonth: null, 
    invalidFormat: false, 
    userInvalidated: false, 
    iso: true }, 
    _locale: Locale { ordinal: [Function], _abbr: 'en' }, 
    _z: 
    { name: 'UTC', 
    abbrs: [ 'UTC' ], 
    untils: [ Infinity ], 
    offsets: [ 0 ] }, 
    _a: [ 2017, 8, 21, 16, 10, 0, 0 ], 
    _d: Thu Sep 21 2017 10:10:00 GMT-0600 (MDT) } 
+0

タイムゾーンjsファイルを追加しました – Thusitha

+0

はい、mrt:moment-timezoneパッケージを使用しています。 – Silicabello

+0

私は、正確にあなたがusecaseの観点から達成したいことと、それがなぜ必要なのか、あなたの質問から正確には分かりません。 Meteor Collectionにフィールドを保存すると、デフォルトでUTCとして保存されます。違いはクライアント側で感じられます。タイムゾーンごとにクライアントが日付を正しく読み取ることができます。だから、なぜあなたはタイムゾーン変換が必要でしょうか?あなたが本当に必要なのであれば、その理由を説明してください。 –

答えて

0

これは機能していますが、間違った方法で日付を取得するだけです。

momentObj._i.substring(0,10)ではなく、momentObj.format()メソッドを使用する必要があります。

const now = moment() 
now.tz('UTC').format() 
# 2017-09-22T04:39:58Z 
now.clone().tz('Europe/Kiev').format() 
# 2017-09-22T07:39:58+03:00 
now.clone().tz('America/Denver').format() 
# 2017-09-21T22:39:58-06:00 

ここは.format() documentationです。

追加.clone()を使用すると、あなたがそうでなければあなただけのnow.tz(...).format(...)を行うことができ、そのままnowを残しておきたい場合にのみ必要です。

関連する問題