2016-11-20 10 views
0

データベース(firebase)の日付とNOWを比較しようとしています。私はmoment.jsを使用していますが、動作していません。私はそれがタイムゾーン(またはUTC + 01:00)と関係があると思います...日付と瞬間を比較する方法

例。 "2016-11-20T14:00:00は" NOW

  • は: "2016-11-20T14:49:20 + 01:00は"
  • は私がmoment()とNOW取得日付1

    • この比較は、正確には1時間オフです...これを修正するにはどうすればよいですか? AND:タイムゾーン間で日付を保存して比較する際のベストプラクティスはありますか?

    +0

    ホープ '瞬間の結果を示してください。( "2016-11-20T16:00:00")形式()'。私はあなたのPCのタイムゾーンが '+01:00'ではないと思います。 –

    +0

    "2016-11-20T14:00:00"は、ホストタイムゾーンオフセットに基づいて解析されます。文字列形式は常にパーサに渡す必要があります。それ以外の場合は、単に推測するだけです。 moment.utc:ローカル時刻にfirebaseから日付を変換するときにそれが働いている – RobG

    答えて

    1

    日付は常にUTCで保存する必要があります。文字列型を使用する場合は、ISO形式のUTC日付時刻値を使用します。

    クライアントのタイムゾーンをUTCに変換し、取得中にUTCからクライアントタイムゾーンに変換するときに保存します。

    同じタイムゾーンで2つの日付の比較を行う必要があります。

    データベースの値がUTCで、モーメントオブジェクトの作成中に.utc()として解析する必要がある場合。

    moment.utc("2016-11-20T14:00:00"); 
    

    比較する前にNOWの値をUTCに変更してください。

    moment.(date1).utc() 
    

    また、データベース値をUTCからローカルに変更することもできます。

    moment.utc("2016-11-20T14:00:00").local() 
    

    比較する前にNOWの値をそのままにしてください。

    +0

    。( "2016-11-20T14:00:00")ローカル()。 – olefrank

    1

    あなたのタイムゾーンに関する情報がないため、Firebaseに保存した日付をnow()と比較することはできません。

    次の例のようFirebase.ServerValue.TIMESTAMP

    使用して日付を格納することができます

    date1: Firebase.ServerValue.TIMESTAMP

    これはFirebaseデータベース・サーバによって(ミリ秒単位でUNIXエポック時間、)Unixのミリ秒であなたの時間を節約します。

    次に、new Date().getTime()と比較すると、デバイスの時間がUnix Millisecondsになります。例については

    if(new Date().getTime() >= date1) { 
        //do something 
    } 
    

    はそれが役立ちます:)

    関連する問題