Сравните две даты с JavaScript - PullRequest
       187

Сравните две даты с JavaScript

1642 голосов
/ 29 января 2009

Может ли кто-нибудь предложить способ сравнения значений двух дат больше, меньше, чем в прошлом, а не с помощью JavaScript? Значения будут поступать из текстовых полей.

Ответы [ 35 ]

13 голосов
/ 20 июля 2009
function datesEqual(a, b)
{
   return (!(a>b || b>a))
}
13 голосов
/ 29 января 2009
var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates
12 голосов
/ 14 марта 2017

Примечание - Сравнить только часть даты:

Когда мы сравниваем две даты в JavaScript. Учитываются также часы, минуты и секунды. Так что, если нам нужно только сравнить только дату, это подход:

var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);

Теперь: if date1.valueOf()> date2.valueOf() будет работать как шарм.

11 голосов
/ 26 марта 2014

Просто чтобы добавить еще одну возможность ко многим существующим опциям, вы можете попробовать:

if (date1.valueOf()==date2.valueOf()) .....

... что похоже на меня. Конечно, вы должны убедиться, что обе даты не определены ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....

Таким образом, мы можем гарантировать, что будет выполнено положительное сравнение, если оба они тоже не определены, или ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....

... если вы предпочитаете, чтобы они не были равны.

10 голосов
/ 05 июля 2016

Через Момент.js

Jsfiddle: http://jsfiddle.net/guhokemk/1/

function compare(dateTimeA, dateTimeB) {
    var momentA = moment(dateTimeA,"DD/MM/YYYY");
    var momentB = moment(dateTimeB,"DD/MM/YYYY");
    if (momentA > momentB) return 1;
    else if (momentA < momentB) return -1;
    else return 0;
}

alert(compare("11/07/2015", "10/07/2015"));

Метод возвращает 1, если dateTimeA больше dateTimeB

Метод возвращает 0, если dateTimeA равно dateTimeB

Метод возвращает -1, если dateTimeA меньше dateTimeB

8 голосов
/ 20 октября 2017

ОСТЕРЕГАЙТЕСЬ ВРЕМЕНИ

Дата JavaScript содержит понятия часового пояса . Это момент времени (тики начиная с эпохи) с удобными функциями для перевода в и из строк в «местном» часовом поясе. Если вы хотите работать с датами, используя объекты даты, как все здесь делают, вы хотите, чтобы ваши даты представляли полночь UTC в начале рассматриваемой даты. Это общее и необходимое соглашение, которое позволяет вам работать с датами независимо от времени года или часового пояса их создания. Таким образом, вы должны быть очень бдительными, чтобы управлять понятием часового пояса, особенно когда вы создаете свой объект UTC Date.

В большинстве случаев вы хотите, чтобы ваша дата отражала часовой пояс пользователя. Нажмите, если сегодня ваш день рождения . Пользователи в Новой Зеландии и США нажимают одновременно и получают разные даты. В таком случае, сделайте это ...

// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));

Иногда международная сопоставимость превосходит локальную точность. В таком случае, сделайте это ...

// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));

Теперь вы можете напрямую сравнивать объекты даты, как предлагают другие ответы.

Позаботившись об управлении часовым поясом при создании, вы также должны не пропускать часовой пояс при преобразовании обратно в строковое представление. Так что вы можете безопасно использовать ...

  • toISOString()
  • getUTCxxx()
  • getTime() //returns a number with no time or timezone.
  • .toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.

И полностью избегать всего остального, особенно ...

  • getYear(), getMonth(), getDate()
8 голосов
/ 31 августа 2016

Для сравнения двух дат мы можем использовать библиотеку JavaScript date.js, которую можно найти по адресу: https://code.google.com/archive/p/datejs/downloads

и используйте метод Date.compare( Date date1, Date date2 ), и он возвращает число , что означает следующий результат:

-1 = дата1 меньше даты2.

0 = значения равны.

1 = дата1 больше даты2.

7 голосов
/ 29 января 2009

Чтобы создать даты из свободного текста в Javascript, вам нужно проанализировать их в объект Date ().

Вы можете использовать Date.parse (), который использует свободный текст, пытается преобразовать его в новую дату, но если у вас есть контроль над страницей, я бы рекомендовал использовать вместо этого поля выбора HTML или средство выбора даты, такое как YUI управление календарем или jQuery UI Datepicker .

Как только у вас есть дата, как указали другие люди, вы можете использовать простую арифметику, чтобы вычесть даты и преобразовать их обратно в число дней, разделив число (в секундах) на количество секунд в дне (60 * 60 * 24 = 86400).

7 голосов
/ 15 ноября 2012

Вычитая две даты, получите разницу в миллисекундах, если вы получите 0, это та же самая дата

function areSameDate(d1, d2){
    return d1 - d2 === 0
}
7 голосов
/ 23 июля 2011

Скажем, вы получили объекты даты A и B, получите их значение времени EPOC, затем вычтите, чтобы получить разницу в миллисекундах.

var diff = +A - +B;

Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...