2017-09-27 20 views
2

私はしばらくの間、momentjsとmoment-timezoneを使用しています。今日、isAfterメソッドを使用して日付比較を使用していましたが、私は奇妙な動作を発見しました。momentjsとタイムゾーンとの比較

1つの瞬間の日付がタイムゾーンの値で構成されていて、それ以外のものが日付の比較の動作であるとします。

私の場合、エポックタイムを特定のタイムゾーン値に1つの日付に変換しています。他の日付は、タイムゾーンの値を指定せずにyyyy-mm-ddの形式です。私はこれらの2日間を比較しているとき、同じ日の価値に失敗しています。理想的には

//Wed Sep 27 2017 01:13:04 GMT-0700 
var localtime = moment(1506499984924).tz("America/Los_Angeles"); 

//Wed Sep 27 2017 00:00:00 
var date = moment('2017-09-27'); 

//returns true 
var value = localtime.isAfter(date, 'day'); 

両方の日付が2017年9月27日なので、それはfalseを返す必要があります。 代わりにdiffメソッドを使用すると、isAfterがtrueを返します。

この問題を解決するお手伝いがあります。あなたのコードではMoment

答えて

2

私はこのコードのペンを作成している

var date = moment('2017-09-27'); 

これは深夜現地時間の値を作成します。特定の瞬間にどのように関係するかは、コンピュータが設定されているローカルタイムゾーンに大きく依存します。

モーメントオブジェクトは、モーメントとして常に比較されます。つまり、瞬時値はUTCに基づいています。

の後ろにある UTCのタイムゾーンにいるため、コードペンを実行するとfalseが表示されます。 trueが表示されているのは、現地時間帯がであり、UTCの(1時間以上、他の値が指定されている場合)です。

+0

大丈夫です。ですから、デフォルトのタイムゾーン 'moment.tz.setDefault(" America/Los_Angeles ");を初期化してからdateモーメントを作成すると、' false'という出力が出ます。これはこの問題を解決する正しい方法ですか? – jarvis

+0

あなたが達成しようとしていることを正確には分かっていないので、問題が解決するかどうかは言えません。 –

関連する問題