2012-10-09 205 views
30

如何檢查兩個日期是否在同一天。我想出了這個解決方案,但也許有更好的方法來做到這一點:如何檢查兩個日期是否在同一日曆日

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

你嘗試輸出dateToCheck.getDay的'結果()'和'actualDate .getDay()'看看有什麼問題嗎? –

+0

如果'dateToCheck'比今天晚了一週,該怎麼辦? –

+0

@lc。這就是爲什麼我檢查了是否至少24小時過去了。 –

回答

69

另一種選擇是使用.toDateString()函數將兩個日期解析爲字符串。函數格式輸出到:「Wed Jul 28 1993.」然後你可以比較兩個日期字符串。

actualDate.toDateString() === dateToCheck.toDateString() 
// returns true if actualDate is same day as dateToCheck 

這裏有一個Plunker:

http://plnkr.co/edit/J5Dyn78TdDUzX82T0ypA

多由MDN:

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(); 

這將確保你不會當涉及到夏令時和閏年時會變得古怪,否則會造成干擾。

+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對象可解析(我在Chrome 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);

0

使用startOf方法實例Date

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

這裏的方法:

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; 
}; 
相關問題