2012-12-07 5 views
8

ある私はタイムスタンプを持っていると私はたい、彼らが同じ日であるかどうかを確認するSQLからいくつかのデータを取得しています....チェック2つのタイムスタンプが同じ日

私は以前にチェックしようとしていますループではループのタイムスタンプは、私がこのような何か.....

$.each(data, function(key, value) { 
    if(new Date([value.startTime] * 1000) === previousdate){ 
     console.log("*** Same day ***"); 
    } 
    previousdate = new Date([value.startTime] * 1000); 
} 

をしようとしています。しかし、彼らは同じ日ですが、彼らは時間が異なっても......電流ループのタイムスタンプと同じです......私はちょうど両方が同じ日かどうかをチェックしたいと思う.....私はそれらを比較する前にそれらを整えることができるので、それはうまく動作する...しかし、これを行うための他の効果的な方法がある.....

乾杯...

+1

同じ日のタイムゾーンは? –

+0

(GMT標準時)と私はUNIXのタイムスタンプを使用しています.. – troy

+1

代わりに最後の24時間と比較するのは大丈夫でしょうか? それはちょうど '| Time2 - Time1 | <24時間のmsで ' – agryson

答えて

12

は、それは私にははっきりしていない:あなたは同じ日について話が、何をやっているから、それは同じ日だかどうかを確認するためにあなたの希望です。それは同じ日だかどうかを確認する方法は、以下である:

$.each(data, function(key, value) { 
    var current = new Date(value.startTime * 1000).setHours(0, 0, 0, 0); 
    var previous = new Date(previousDate).setHours(0, 0, 0, 0); 

    if(current === previous){ 
     console.log("*** Same day ***"); 
    } 
    previousdate = new Date([value.startTime] * 1000); 
}) 

あなたは基本的にすべての時間値(時間、分、秒、およびミリ秒)をリセットし、新しいDateオブジェクトを作成します。

だけこのチェックのためpreviousdateを使用している場合は、簡素化することができます:

$.each(data, function(key, value) { 
    var current = new Date(value.startTime * 1000).setHours(0, 0, 0, 0); 

    if(current === previousdate){ 
     console.log("*** Same day ***"); 
    } 

    previousdate = current; 
}); 

* 1000操作のほかに、それは私の知る限り最も簡単で安全な方法です。あなたはエンジンにすべての計算をさせます:すべての日が24時間で終わるわけではなく、夏時間を参照してください。そして、すべての分が60秒で作られるわけではありません。それで、それを前提とした操作は安全ではありません。

もちろん、エンジンによっては、うるう秒も処理できませんでしたが、少なくとも夏時間の間は、さらに優れています。

+0

こんにちは、これは私が後になったことです、そして説明に感謝..... – troy

3

あなたはUTCの日付のみを気にするので、これは簡単です。タイムスタンプは秒数であるため、1日の秒数で除算して値をフロアすると、1970年1月1日以降の日数を取得する必要があります。両方の値が1970年以降同じ日数の場合あなたはマッチします。あなたはそれが同じ日、同じ日だかどうかを確認したい場合は

$.each(data, function(key, value) { 
    var date, previous; 
    date = Math.floor(value.startTime/60/60/24); 
    if (date === previous){ 
     console.log("*** Same day ***"); 
    } 
    previous = date; 
} 
+1

DSTがこれを破ります。 'Math.floor(new Date(" 11/25/13 ")/(24 * 60 * 60 * 1000))== Math.floor(新しい日付(" 11/24/13 23:00 ")/ 24 * 60 * 60 * 1000)) '。それは事実になります。 – Andrew

10

また、日付文字列を確認してみることもできます。

var isSameDay = function(date, otherDate) { 
    return date.toDateString() === otherDate.toDateString(); 
}; 

これはインラインで行うのが簡単だからいいです。

+1

これは、同じ日付である必要があります。その理由は、受け入れられた回答が、比較する前に同じ値に両方の時刻を設定するからです。 – owencm

+0

@owencmのおかげで、 'toString'を' toDateString'に切り替えることで修正しました。 – vpontis

関連する問題