2012-10-09 38 views
30

Cách kiểm tra xem hai ngày không có trong cùng một ngày hay không. Tôi đã đưa ra giải pháp này nhưng có lẽ đó là một cách tốt hơn để làm điều này:Cách kiểm tra xem hai ngày không có trong cùng ngày dương lịch

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

Cậu cố gắng để đầu ra là kết quả của 'dateToCheck.getDay()' và 'actualDate .getDay() 'để xem có điều gì sai không? –

+0

Điều gì xảy ra nếu 'dateToCheck' chính xác là một tuần sau ngày hôm nay? –

+0

@ lc., Đó là lý do tại sao tôi đã kiểm tra nếu tối thiểu là 24 giờ đã trôi qua. –

Trả lời

69

Một tùy chọn khác đang sử dụng chức năng .toDateString() để phân tích cả hai ngày thành chuỗi. Định dạng hàm xuất ra: "Wed Jul 28 1993." Sau đó, bạn có thể so sánh cả hai chuỗi ngày tháng.

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

Dưới đây là một Plunker:

http://plnkr.co/edit/J5Dyn78TdDUzX82T0ypA

Và hơn thế nữa từ MDN:

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

+0

Bây giờ đó là sử dụng đầu của bạn! –

+0

Đoán đây là câu trả lời đơn giản nhất! –

6

Nó sẽ là an toàn nhất để kiểm tra ngày, tháng, năm:

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

này sẽ đảm bảo bạn không có được những điều kỳ quặc khi nói đến DST và những năm nhuận có thể gây trở ngại khác.

+0

Tôi nghĩ rằng anh ấy muốn kiểm tra xem cả hai ngày là thứ hai, thứ ba, thứ tư, v.v. –

22

Làm thế nào về việc kiểm tra cho cùng ngày, tháng & năm:

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

phương pháp này có vẻ là nhanh nhất: https://jsperf.com/check-same-date – CoderPi

+0

Tôi sẽ sử dụng điều này cho nhiều hoạt động, nếu không câu trả lời được chấp nhận là một chút sạch hơn trong quan điểm của tôi. –

0

Đừng tạo đối tượng hẹn hò với một thời gian vì vậy họ đang cả hai được tạo ra vào lúc nửa đêm. Sau đó, chỉ cần kiểm tra thời gian epoch.

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 

Những ngày chỉ cần được parseable bởi đối tượng Date (Tôi đang trên chrome 23.0.1271.17 (Official Build 159.779) beta) và nếu bạn không vượt qua một thời gian họ sẽ tạo ra vào lúc nửa đêm.

Nếu bạn nhận được thời gian, chỉ cần thả nó xuống sàn và kiểm tra vào nửa đêm.

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

Sử dụng một phương pháp startOf cho trường hợp của Date:

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

Dưới đây là phương pháp:

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; 
}; 
Các vấn đề liên quan