Подтвердить что ты не робот

Как проверить, не совпадают ли две даты в один и тот же день календаря

Как проверить, не указаны ли две даты в тот же день. Я придумал это решение, но, возможно, есть лучший способ сделать это:

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

Ответ 1

Другим вариантом является использование функции .toDateString() для синтаксического анализа обеих дат в строках. Форматы функций выводятся на: "Ср. 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

Ответ 2

Как насчет проверки того же дня, месяца и года:

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

Ответ 3

Было бы безопаснее проверять день, месяц и год:

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

Это гарантирует, что вы не получите странностей, когда дело доходит до летнего времени и високосных лет, которые могут помешать другим.

Ответ 4

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

Ответ 5

Не создавайте объект даты со временем, чтобы они были созданы в полночь. Затем просто проверьте время эпохи.

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 (Official Build 159779) beta), и если вы не пройдете время, которое они будут генерировать в полночь.

Если у вас есть время, просто опустите его на пол и проведите испытание в полночь.

Ответ 6

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

Ответ 7

Используйте метод 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;
};