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

1607

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

  • 15
    Когда дело доходит до DateTime и манипуляций в JS, я смотрю не дальше, чем на моменты :)
  • 15
    нет необходимости использовать моменты, чтобы сравнить 2 даты. Просто используйте чистый объект Date в JavaScript. Проверьте основной ответ для более подробной информации.
Показать ещё 4 комментария
Теги:
object
datetime
date
compare

35 ответов

1729
Лучший ответ

Объект Date будет делать то, что вы хотите - построить по одному для каждой даты, а затем сравнить их с помощью >, <, <= или >=.

Операторы ==, !=, === и !== требуют, чтобы вы использовали date.getTime(), как в

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

чтобы быть понятным, просто проверка равенства непосредственно с объектами данных не будет работать

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Я предлагаю вам использовать выпадающие списки или некоторую подобную ограниченную форму ввода даты, а не текстовые поля, тем не менее, чтобы вы не попали в адвентизацию ввода.

  • 398
    Работает для> <, как и состояния вопроса, но я подумал, что просто прокомментирую, что это не сработает, если ==, поскольку сами объекты разные. Например: var date1 = new Date (); var date2 = новая дата (date1); date1 == date2 ложно. Если вы сделаете date1.getTime () == date2.getTime (), вы получите истину.
  • 55
    Даже метод Эйса не безотказен. Сначала вам нужно сбросить миллисекунды, и вы можете даже сбросить все время. date1.setHours (0); date1.setMinutes (0); date1.setSeconds (0); date1.setMilliseconds (0); Это в сочетании с использованием .getTime () даст вам точный результат сравнения
Показать ещё 17 комментариев
385

Самый простой способ сравнить даты в javascript - сначала преобразовать его в объект Date, а затем сравнить эти объекты даты.

Ниже вы найдете объект с тремя функциями:

  • dates.compare(а, б)

    Возвращает число:

    • -1, если a < б
    • 0, если a = b
    • 1, если a > б
    • NaN, если a или b является незаконной датой
  • date.inRange (d, начало, конец)

    Возвращает логическое значение или NaN:

    • true, если d находится между началом и концом (включительно)
    • false, если d до начала или после завершения.
    • NaN, если одна или несколько дат являются незаконными.
  • dates.convert

    Используется другими функциями для преобразования их ввода в объект даты. Вход может быть

    • a date -объект: вход возвращается как есть.
    • массив . Интерпретируется как [год, месяц, день]. ПРИМЕЧАНИЕ месяц равен 0-11.
    • a число. Интерпретируется как количество миллисекунд с 1 января 1970 года (временная метка)
    • a строка: поддерживается несколько различных форматов, например "ГГГГ/ММ/ДД", "ММ/ДД/ГГГГ", "Янв 31 2009" и т.д.
    • объект. Интерпретируется как объект с атрибутами года, месяца и даты. ПРИМЕЧАНИЕ месяц равен 0-11.

.

// Source: http://stackoverflow.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}
  • 9
    (a > b) - (a < b) полезно для сортировки массива дат
  • 0
    @nikita Да, это так, и функцию, которая возвращает этот результат, можно использовать с Array.prototype.sort если все значения являются действительными датами. Если могут быть недопустимые даты, я рекомендую использовать что-то вроде function ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
Показать ещё 1 комментарий
248

Сравните < и > как обычно, но все, что связано с =, должно использовать префикс +. Например:

var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!

// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x <= +y;  => true
+x >= +y;  => true
+x === +y; => true

Надеюсь, это поможет!

  • 70
    ужасно медленный :) Я предпочитаю x.getTime() === y.getTime() , как читаемый, так и очень быстрый, см. jsperf
  • 23
    Оператор + пытается преобразовать выражение в число. Date.valueOf() используется для преобразования (которое возвращает то же самое, что Date.getTime() .
Показать ещё 5 комментариев
127

Реляционные операторы < <= > >= могут использоваться для сравнения дат JavaScript:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1 <= d2; // true
d1 >  d2; // false
d1 >= d2; // false

Однако операторы равенства == != === !== не могут использоваться для сравнения (значения) дат потому что:

  • Два разных объекта никогда не равны ни для строгих, ни для абстрактных сравнений.
  • Эксперимент, сравнивающий объекты, имеет значение true, только если операнды ссылаются на один и тот же объект.

Вы можете сравнить значение дат равенства с помощью любого из этих методов:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

Оба Date.getTime() и Date.valueOf() возвращают число миллисекунд с 1 января 1970 года, 00:00 по UTC. Обе функции Number и унарный оператор + вызывают методы valueOf() за кулисами.

  • 0
    Безопасно ли конвертировать объект String в Date? Может ли это не бросить исключение или дать ненадежные результаты? Что может быть самым надежным способом составления дат в JS? Когда вы говорите о ненадежных результатах, может ли этот метод давать разные / неправильные значения, даже если мы уверены, что формат даты не изменится -> Это будет «Четверг, 10 августа 2017 года». Ваша помощь здесь очень ценится.
  • 0
    Может ли это дать ненадежные результаты при одинаковом значении даты на разных ОС / браузерах / устройствах?
Показать ещё 1 комментарий
69

Безусловно, самый простой способ - вычесть одну дату из другой и сравнить результат.

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);
43

Сравнение дат в JavaScript довольно просто... JavaScript имеет встроенную систему сравнения для дат, которая позволяет легко сравнивать.

Просто выполните следующие шаги для сравнения двух значений даты, например, у вас есть 2 входа, каждый из которых имеет значение Date в String и вы можете сравнить их...

1. У вас есть 2 строковых значения, которые вы получаете от ввода, и вы хотели бы их сравнить, они приведены ниже:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

2. Они должны быть Date Object которые будут сравниваться как значения даты, поэтому просто преобразуйте их на дату, используя new Date(), я просто повторно назначаю их для простоты объяснений, но вы можете сделать это в любом случае:

date1 = new Date(date1);
date2 = new Date(date2);

3. Теперь просто сравнить их, используя > < >= <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true

Изображение 2133

  • 0
    Я обнаружил, что большинство решений для сравнения дат работают в любом браузере. Я столкнулся с проблемой IE. Это решение работало по всем направлениям. Спасибо Алиреза!
  • 2
    Не работает И это не должно работать. Вы сравниваете объект даты.
Показать ещё 2 комментария
31

Сравнить только день (без учета компонента времени):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

Использование:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}
  • 0
    Просто и легко читать. Лучшее свидание (только) сравнить, которое я видел
  • 0
    это хорошо. но что, если я сравниваю следующий день или предыдущий день. я попробовал это Date.prototype.nextDay = function (d) {вернуть this.getFullYear () === d.getFullYear () && this.getDate () <d.getDate () && this.getMonth () === d .getMonth (); } Date.prototype.previousDay = function (d) {вернуть this.getFullYear () === d.getFullYear () && this.getDate ()> d.getDate () && this.getMonth () === d.getMonth (); } но это будет работать только в этом месяце. как сравнить по месяцам или годам
26

какой формат?

Если вы создаете Javascript объект Date, вы можете просто вычесть их для получения разницы в миллисекундах (отредактируйте или просто сравните их):

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true
  • 1
    Вычитание является хорошей идеей, поскольку позволяет избежать проблемы сравнения == упомянутой выше.
  • 0
    Какой JavaScript REPL вы используете?
Показать ещё 4 комментария
14

КОРОТКИЙ ОТВЕТ

Вот функция, возвращающая {boolean}, если от dateTime> до dateTime Demo в действии

var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '

function isFromBiggerThanTo(dtmfrom, dtmto){
   return new Date(dtmfrom).getTime() >=  new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true

объяснение

jsFiddle

var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000 
console.log(typeof timeStamp_date_one);//number 
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000 
console.log(typeof timeStamp_date_two);//number 

поскольку теперь у вас есть как datetime в типе числа, вы можете сравнить их с любыми операциями сравнения

(>, <, =,! =, ==,! ==,> = AND <=)

затем

если вы знакомы с C# Custom Date и Time Format String, эта библиотека должна делать то же самое и помогать вам форматировать дату и время dtmFRM независимо от того, проходите ли вы в строке времени даты или в формате unix

Применение

var myDateTime = new dtmFRM();

alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM

alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday

alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21

DEMO

все, что вам нужно сделать, это передать любой из этих форматов, умиротворенных в файле js библиотеки

  • 0
    новая дата (dtmfrom)> = новая дата (dtmto) намного медленнее новой даты (dtmfrom) .getTime ()> = новая дата (dtmto) .getTime ()
  • 0
    Возможно, но разница составляет от 30 до 120 наносекунд (скажем, 0,000000075 секунд) за операцию, в зависимости от браузера, поэтому не очень значительная.
14

вы используете этот код,

var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     

  if (firstDate > secondDate)
  {
   alert("First Date  is greater than Second Date");
  }
 else
  {
    alert("Second Date  is greater than First Date");
  }

А также проверьте эту ссылку http://www.w3schools.com/js/js_obj_date.asp

  • 3
    Причина, по которой не следует обращаться к W3Schools: w3fools.com - хорошее решение - соответствует ли оно стандартам и работает ли оно во всех браузерах?
  • 0
    Лучше обратиться к Mozilla Developer Network: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
13
function datesEqual(a, b)
{
   return (!(a>b || b>a))
}
  • 1
    Какого они типа а или б? Сроки? Какой формат? Это не похоже на работу со мной.
  • 5
    предполагая, что a и b являются объектами Date вы также можете использовать return a*1 == b*1;
Показать ещё 1 комментарий
12
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
11

Чтобы добавить еще одну возможность для многих существующих опций, вы можете попробовать:

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

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

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

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

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

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

10

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

Когда мы сравниваем две даты в 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() будет работать как шарм.

9

Через Moment.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

  • 3
    Нет необходимости использовать внешнюю библиотеку, такую как Moment, для сравнения дат для объектов Date .
  • 0
    Момент был абсолютно необходим для моего случая использования. Спасибо, Разан!
Показать ещё 1 комментарий
8

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

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

-1 = date1 is lessthan date2.

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

1 = дата1 больше, чем дата2.

7

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

function areSameDate(d1, d2){
    return d1 - d2 === 0
}
7

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

var diff = +A - +B;

Что все.

  • 0
    Работает на мгновение и с == тоже отлично!
7

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

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

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

6

ОСТОРОЖНО ВРЕМЕНИ

В дате javascript нет понятия часового пояса. Это момент времени (тики с эпохи) с удобными функциями для перевода в строки и из строк в "локальном" часовом поясе. Если вы хотите работать с датами с использованием объектов даты, как это делают все, , вы хотите, чтобы ваши даты представляли собой полутонов UTC в начале указанной даты. Это обычное и необходимое соглашение, которое позволяет вы работаете с датами независимо от сезона или часового пояса их создания. Поэтому вам нужно быть очень бдительными, чтобы управлять понятием часового пояса, особенно когда вы создаете свой полуночный объект UTC Date.

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

// create a date (utc midnight) reflecting the value of myDate and the environment 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()
6
var date_today=new Date();
var formated_date = formatDate(date_today);//Calling formatDate Function

var input_date="2015/04/22 11:12 AM";

var currentDateTime = new Date(Date.parse(formated_date));
var inputDateTime   = new Date(Date.parse(input_date));

if (inputDateTime <= currentDateTime){
    //Do something...
}

function formatDate(date) {
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';

    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    hours   = hours < 10 ? '0'+hours : hours ;

    minutes = minutes < 10 ? '0'+minutes : minutes;

    var strTime = hours+":"+minutes+ ' ' + ampm;
    return  date.getFullYear()+ "/" + ((date.getMonth()+1) < 10 ? "0"+(date.getMonth()+1) :
    (date.getMonth()+1) ) + "/" + (date.getDate() < 10 ? "0"+date.getDate() :
    date.getDate()) + " " + strTime;
}
5

Улучшенная версия кода, размещенная "некоторыми"

/* Compare the current date against another date.
 *
 * @param b  {Date} the other date
 * @returns   -1 : if this < b
 *             0 : if this === b
 *             1 : if this > b
 *            NaN : if a or b is an illegal date
*/ 
Date.prototype.compare = function(b) {
  if (b.constructor !== Date) {
    throw "invalid_date";
  }

 return (isFinite(this.valueOf()) && isFinite(b.valueOf()) ? 
          (this>b)-(this<b) : NaN 
        );
};

использование:

  var a = new Date(2011, 1-1, 1);
  var b = new Date(2011, 1-1, 1);
  var c = new Date(2011, 1-1, 31);
  var d = new Date(2011, 1-1, 31);

  assertEquals( 0, a.compare(b));
  assertEquals( 0, b.compare(a));
  assertEquals(-1, a.compare(c));
  assertEquals( 1, c.compare(a));
  • 0
    Предположительно, это экземпляр Date, в котором вызывается метод. В этом случае может ли быть неверная дата, но все еще может быть экземпляром дата?
4

Я обычно храню Dates как timestamps(Number) в базах данных.

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

преобразуйте его в объект Date, а затем при необходимости сравните с > <.

Обратите внимание, что == или === не работает должным образом, если ваши переменные не являются ссылками того же объекта Date.

Сначала конвертируйте те объекты Date в метку времени (число), а затем сравните их равенство.


Дата по метке времени

var timestamp_1970 = new Date(0).getTime(); // 1970-01-01 00:00:00
var timestamp = new Date().getTime(); // Current Timestamp

Отметка времени

var timestamp = 0; // 1970-01-01 00:00:00
var DateObject = new Date(timestamp);
4

Если следующий формат даты, вы можете использовать этот код:

var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
   //...
}

Он будет проверять, больше ли число 20121121 больше 20121103 или нет.

  • 4
    Если он уже имеет формат ISO8601 (ГГГГ-ММ-ДД), вам не нужно удалять какие-либо символы или преобразовывать его в целое число. Просто сравните строки first == second или first < second или first > second . Это одна из многих красот с ISO8601 по сравнению с ММ / ДД / ГГ, ДД / ММ / ГГ, ГГ / ДД / ММ, ДД / ГГ / ММ или ММ / ГГ / ДД.
2

Прежде чем сравнивать объект Dates, попробуйте установить обе их миллисекунды на ноль, как Date.setMilliseconds(0);.

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

1

Другим способом сравнения двух дат является метод toISOString(). Это особенно полезно при сравнении с фиксированной датой, хранящейся в строке, поскольку вы можете избежать создания недолговечного объекта. В силу формата ISO 8601 вы можете сравнить эти строки лексикографически (по крайней мере, когда вы используете один и тот же часовой пояс).

Я не обязательно говорю, что это лучше, чем использование временных объектов или временных меток; просто предлагая это как еще один вариант. Там могут быть случаи краев, когда это может потерпеть неудачу, но я еще не наткнулся на них:)

1

Привет Здесь мой код для сравнения дат. В моем случае я делаю чек, чтобы не выбирать выбранные даты.

var myPickupDate = <pick up date> ;
var isPastPickupDateSelected = false;
var currentDate = new Date();

if(currentDate.getFullYear() <= myPickupDate.getFullYear()){
    if(currentDate.getMonth()+1 <= myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                        if(currentDate.getDate() <= myPickupDate.getDate() || currentDate.getMonth()+1 < myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                                            isPastPickupDateSelected = false;
                                            return;
                                        }
                    }
}
console.log("cannot select past pickup date");
isPastPickupDateSelected = true;
1

Предположим, что вы имеете дело с этим форматом даты 2014[:-/.]06[:-/.]06 или этого 06[:-/.]06[:-/.]2014, тогда вы можете сравнить даты таким образом

var a = '2014.06/07', b = '2014-06.07', c = '07-06/2014', d = '07/06.2014';

parseInt(a.replace(/[:\s\/\.-]/g, '')) == parseInt(b.replace(/[:\s\/\.-]/g, '')); // true
parseInt(c.replace(/[:\s\/\.-]/g, '')) == parseInt(d.replace(/[:\s\/\.-]/g, '')); // true
parseInt(a.replace(/[:\s\/\.-]/g, '')) < parseInt(b.replace(/[:\s\/\.-]/g, '')); // false
parseInt(c.replace(/[:\s\/\.-]/g, '')) > parseInt(d.replace(/[:\s\/\.-]/g, '')); // false

Как вы можете видеть, мы разделим разделители (разделители), а затем сравниваем целые числа.

1

Вот что я сделал в одном из моих проектов,

function CompareDate(tform){
     var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
     var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));

     if(tform.START_DATE.value!=""){
         var estStartDate = tform.START_DATE.value;
         //format for Oracle
         tform.START_DATE.value = estStartDate + " 00:00:00";
     }

     if(tform.END_DATE.value!=""){
         var estEndDate = tform.END_DATE.value;
         //format for Oracle
         tform.END_DATE.value = estEndDate + " 00:00:00";
     }

     if(endDate <= startDate){
         alert("End date cannot be smaller than or equal to Start date, please review you selection.");
         tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
         tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
         return false;
     }
}

вызов этого на форме onsubmit. надеюсь, что это поможет.

1
var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}
1
        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }

Используйте этот код для сравнения даты с помощью javascript.

Спасибо D.Jeeva

  • 0
    Я думаю, что это хороший ответ, потому что у нас есть формат «дд / мм / гг», и мы должны сделать это, чтобы сравнить обе даты. Я не знаю, лучший ли это ответ, но этого достаточно. Спасибо, что поделились.
0

Вы можете сравнивать дату, как наиболее простой и понятный способ.

<input type="date" id="getdate1" />
<input type="date" id="getdate2" />

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

поэтому сначала напишите общий метод для синтаксического анализа даты.

 <script type="text/javascript">
            function parseDate(input) {
             var datecomp= input.split('.'); //if date format 21.09.2017

              var tparts=timecomp.split(':');//if time also giving
              return new Date(dparts[2], dparts[1]-1, dparts[0], tparts[0], tparts[1]);
// here new date(  year, month, date,)
            }
        </script>

parseDate() - это общий метод для разбора даты.  теперь вы можете проверить свою дату =, > , < любой тип сравнения

    <script type="text/javascript">

              $(document).ready(function(){
              //parseDate(pass in this method date);
                    Var Date1=parseDate($("#getdate1").val());
                        Var Date2=parseDate($("#getdate2").val());
               //use any oe < or > or = as per ur requirment 
               if(Date1 = Date2){
         return false;  //or your code {}
}
 });
    </script>

Для этого этот код вам поможет.

0

попробуйте это в то время как дата сравнения должна быть iso format "yyyy-MM-dd" если вы хотите сравнить только даты, используйте этот параметр datehelper

<a href="https://plnkr.co/edit/9N8ZcC?p=preview"> Live Demo</a>
-2

Попробуйте использовать этот код

var f =date1.split("/");

var t =date2.split("/");

var x =parseInt(f[2]+f[1]+f[0]);

var y =parseInt(t[2]+t[1]+t[0]);

if(x > y){
    alert("date1 is after date2");
}

else if(x < y){
    alert("date1 is before date2");
}

else{
    alert("both date are same");
}
  • 2
    Нет абсолютно никакой причины делать разбиение строк в такую дату, когда вы можете просто использовать getMinutes , getSeconds и т. Д.
  • 2
    Почему, черт возьми, я продолжаю терять репутацию, когда за этот ответ проголосуют?
-5

Сравнение дат:

var str1  = document.getElementById("Fromdate").value;
var str2  = document.getElementById("Todate").value;
var dt1   = parseInt(str1.substring(0,2),10); 
var mon1  = parseInt(str1.substring(3,5),10);
var yr1   = parseInt(str1.substring(6,10),10); 
var dt2   = parseInt(str2.substring(0,2),10); 
var mon2  = parseInt(str2.substring(3,5),10); 
var yr2   = parseInt(str2.substring(6,10),10); 
var date1 = new Date(yr1, mon1, dt1); 
var date2 = new Date(yr2, mon2, dt2); 

if(date2 < date1)
{
   alert("To date cannot be greater than from date");
   return false; 
} 
else 
{ 
   alert("Submitting ...");
   document.form1.submit(); 
} 
  • 3
    Есть так много вещей, которые не подходят под вопрос и делают (плохие) предположения: чтение (локализованного) представления даты из HTML-элемента, разбиение этих строковых представлений на отдельные компоненты с использованием очень оптимистичного метода извлечения; создание новых дат на основе данных (которые могут быть недействительными); не используя время; терпит неудачу, если дата 2 предшествует дате 1 - но успешно, если она равна или больше - не упоминая, как даты могут фактически сравниваться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню