2012-10-09 10 views
30

2つの日付が同じ日にないかどうかを確認する方法。私はこの解決策を考え出したが、多分これを行うには良い方法があります:2つの日付が同じ暦日にないかどうかをチェックする方法

var actualDate = new Date(); 
var isNotToday = dateToCheck.getDay() !== actualDate.getDay() || dateToCheck < actualDate - 24 * 60 * 60 * 1000; 
+1

あなたは出力に 'dateToCheck.getDay()の結果を試し'と 'actualDateました:

dateA.startOf('day').getTime() === dateB.startOf('day').getTime() 

ここに方法はありますが.getDay() '何か間違っているかどうかを確認するには? –

+0

'dateToCheck'が今日よりちょうど1週間遅れていたらどうなりますか? –

+0

@lc。それは私が最低24時間が経過したかどうかをチェックした理由です。 –

答えて

69

もう1つのオプションは、両方の日付を文字列に解析するための関数.toDateString()を使用しています。関数の出力形式は、 "Wed Jul 28 1993 Wed"です。次に、両方の日付文字列を比較できます。 MDNから

http://plnkr.co/edit/J5Dyn78TdDUzX82T0ypA

そして、もっと:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString

+0

あなたの頭を使っています! –

+0

これは一番簡単な答えです。 –

6

それは日、月、年をチェックするのが最も安全次のようになります。

var isNotToday = dateToCheck.getDate() != actualDate.getDate() 
     || dateToCheck.getMonth() != actualDate.getMonth() 
     || dateToCheck.getFullYear() != actualDate.getFullYear(); 

これは、あなたがいないことを確認しますがそれがDSTになると奇妙になり、そうでなければ干渉する可能性があります。

+0

私は彼が両方の日付が月曜日、火曜日、水曜日などであるかどうかチェックしたいと思うと思います。 –

22

どのように同じ日の確認について、月&年:

var isSameDay = (dateToCheck.getDate() == actualDate.getDate() 
     && dateToCheck.getMonth() == actualDate.getMonth() 
     && dateToCheck.getFullYear() == actualDate.getFullYear()) 
+0

この方法が最も速いようです:https://jsperf.com/check-same-date – CoderPi

+0

私はこれを複数の操作に使用します。そうでなければ、受け入れられた答えは私の意見では少しきれいです。 –

0

はそう彼らは両方の深夜に生成している時間と日付オブジェクトを作成しないでください。次に、エポック時間を確認します。

new Date('11/12/2012').getTime() === new Date('11/11/2012').getTime() 
> false 
new Date('11/12/2012').getTime() === new Date('11/12/2012').getTime() 
> true 
new Date('November 12, 2012').getTime() === new Date('11/12/2012').getTime() 
> true 
new Date('12 November, 2012').getTime() === new Date('11/12/2012').getTime() 
> true 

日は、ちょうどあなたは、彼らが深夜に発生するだろう時間を渡さない場合Dateオブジェクト(私はクローム23.0.1271.17(公式ビルド159779によ)ベータ版)で解析可能なこととする必要があります。

時間がかかる場合は、床に落として深夜にテストしてください。

1
function getStartOfDay(aDate){ 
    //returns the very beginning of the same day 
    return new Date(aDate.getTime() - aDate.getTime() % 86400000); 
} 

var aDate1 = getStartOfDay(new Date()); 
var aDate2 = getStartOfDay(new Date(1981, 7, 3)); 

var result = aDate1.getTime() === aDate2.getTime(); 
0

function isEqual(startDate, endDate) { 
 
    return endDate.valueOf() == startDate.valueOf(); 
 
} 
 

 
var now =new Date(); 
 
var startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate()); 
 
var endDate = new Date(2017, 0, 13) 
 

 
var result = isEqual(startDate , endDate); 
 
console.log(result);
ここ
actualDate.toDateString() === dateToCheck.toDateString() 
// returns true if actualDate is same day as dateToCheck 

はPlunkerです

0

DateのインスタンスのstartOf方法を使用します

Date.prototype.startOf = function(unit) { 
    var clone = new Date(this.getTime()), day; 
    /* */if (unit === 'second') clone.setMilliseconds(0); 
    else if (unit === 'minute') clone.setSeconds(0,0); 
    else if (unit === 'hour' ) clone.setMinutes(0,0,0); 
    else { 
     clone.setHours(0,0,0,0); 
     if (unit === 'week') { 
      day = clone.getDay(); 
      clone = day ? new Date(clone - 1000 * 60 * 60 * 24 * day) : clone; 
     } 
     else if (unit === 'month') clone.setDate(1); 
     else if (unit === 'year') clone.setMonth(0,1); 
    } 
    return clone; 
}; 
関連する問題