Как мне сравнить дату в Javascript?

Я хотел бы сравнить две даты в javascript. Я провел некоторое исследование, но все, что я могу найти, - это как вернуть текущую дату. Я хочу сравнить 2 отдельные даты, не относящиеся к сегодняшнему дню. Как я это сделал.

var startDate = Date(document.form1.Textbox2);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
112
0
368 282
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий
if (date1.getTime() > date2.getTime()) {
    alert("The first date is after the second date!");
}

Ссылка на объект Date

У меня было такое предложение, но функция getTime возвращает неопределенное значение. Не думаю, что я полностью понимаю getTime (). Это должна быть предопределенная функция?

Lulu Ket 03.12.2008 23:22

надеюсь, это поможет comptechdoc.org/independent/web/cgi/javamanual/javadate.html

IsmailS 01.06.2010 10:15

Похоже, что Chrome и Firefox поддерживают date1 > date2, то есть без части getTime (). Кто-нибудь знает о других браузерах?

Linus Unnebäck 02.08.2011 18:52

@Linus Я бы не стал доверять реализации, чтобы сделать это правильно. Лучше перестраховаться, чем сожалеть, да?

Jonathan Dumaine 18.11.2011 03:38

@JonathanDumaine Согласен, подумал, что это выглядит намного лучше :)

Linus Unnebäck 19.11.2011 21:16

ValueOf более надежен

Ben 17.06.2016 15:55

Вы можете использовать метод getTime () для объекта Date, чтобы получить отметку времени (в миллисекундах) относительно 1 января 1970 года. Если вы конвертируете две даты в целочисленные отметки времени, вы можете затем сравнить разницу, вычитая их. Результат будет в миллисекундах, поэтому вы просто разделите на 1000 для секунд, затем на 60 для минут и т. д.

Даты JavaScript можно сравнивать с помощью тех же операторов сравнения, которые используют остальные типы данных:>, <, <=,> =, ==,! =, ===,! ==.

Если у вас есть две даты A и B, то A <B, если A уходит в прошлое дальше, чем B.

Но похоже, что у вас проблемы с превращением струны в свидание. Вы делаете это, просто передавая строку в качестве аргумента для новой даты:

var someDate = new Date("12/03/2008");

или, если нужная строка является значением поля формы, как кажется:

var someDate = new Date(document.form1.Textbox2.value);

Если эта строка не является чем-то, что JavaScript распознает как дату, вы все равно получите объект Date, но он будет «недействительным». Любое сравнение с другой датой вернет false. При преобразовании в строку она станет «недействительной датой». Его функция getTime () вернет NaN, а вызов isNaN () для самой даты вернет true; это простой способ проверить, является ли строка действительной датой.

что произойдет, если строка не может быть проанализирована до даты?

Russ Cam 03.12.2008 22:57

Тогда вы все равно получите объект Date, но он недействителен. Любое сравнение с другой датой вернет false. Его функция getTime () вернет NaN, а вызов isNaN () для самой даты вернет true. При преобразовании в строку она станет «недействительной датой».

Will Wagner 04.12.2008 16:09

Это не работает с == (по крайней мере, в firefox). Прямое сравнение двух дат всегда возвращает false, вы должны использовать getTime (), как упоминалось выше.

Luper Rouch 20.05.2009 07:36

В Visual Studio 2010 отладчик javascript: ?(new Date('1995-02-04T24:00') == new Date('1995-02-05T00:00')); false, но ?(new Date('1995-02-04T24:00').getTime() == new Date('1995-02-05T00:00').getTime()); true

Tim 05.02.2013 19:21

'===' сравнивает ссылки на объекты и работать не будет.

Torleif 05.12.2014 12:48

new Date («12/1/2015»)! == new Date («12/1/2015»), поэтому утверждение, что вы сравниваете даты JavaScript, такие как «остальные типы данных», в лучшем случае вводит в заблуждение. Проголосовали против.

Isak 12.02.2015 01:44

==,! =, ===,! === не работают. Также нет оператора! ===.

Evgeni Nabokov 24.03.2015 13:34

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

eggmatters 07.08.2015 19:55

@eggmatters на самом деле >, <, <= и >= действительно работают для сравнения дат.

Andy 26.11.2016 19:19

@Isak Это потому, что новая дата ("13/1/2015") возвращает недопустимую дату -_-

Marcos Pereira 12.05.2018 17:17

Я бы предпочел использовать метод Date valueOf вместо === или! ==

Похоже, что === сравнивает внутренние ссылки на объекты и ничего не касается даты.

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

if (CompareDates(smallDate,largeDate,'-') == 0) {
    alert('Selected date must be current date or previous date!');
return false;
}

function CompareDates(smallDate,largeDate,separator) {
    var smallDateArr = Array();
    var largeDateArr = Array(); 
    smallDateArr = smallDate.split(separator);
    largeDateArr = largeDate.split(separator);  
    var smallDt = smallDateArr[0];
    var smallMt = smallDateArr[1];
    var smallYr = smallDateArr[2];  
    var largeDt = largeDateArr[0];
    var largeMt = largeDateArr[1];
    var largeYr = largeDateArr[2];

    if (smallYr>largeYr) 
        return 0;
else if (smallYr<=largeYr && smallMt>largeMt)
    return 0;
else if (smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt)
    return 0;
else 
    return 1;
}  
new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf()

работает нормально спасибо

Paresh3489227 09.08.2016 11:29

@VladimirShmidt: не будет работать в firefox.

Ajay Barot 13.12.2017 13:59

@AjayBarot проверил, хорошо ли работает в последней версии FireFox.

Vladimir Shmidt 05.01.2018 16:02

Вы можете попробовать этот код для проверки того, какое значение даты является наибольшим из двух дат в формате ММ / ДД / ГГГГ:

function d_check() {
    var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one
    var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two

    if ((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) {
        alert("first date is greater");
        return false;
    }

    else if ((((dl_sdt.substr(0,2)) > (dl_endt.
        substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))||
        (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&&
        ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))||
        (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > 
        (dl_endt.substr(3,2))))) {
            alert("first date is greater");
        return false;
    }

    alert("second date is digher");
    return true;
}

/ * для проверки .... создайте форму и дайте идентификаторы двум входам даты. Формат даты должен быть мм / дд / гггг или мм-дд-гггг или мм: дд: гггг или мм.дд.гггг, как это . * /

Очень хорошая функция, за исключением одной мелочи. Предполагается, что пользовательский ввод всегда будет следовать заданному шаблону даты (использование подстрок). Думаю, я мог бы использовать это, хотя и с некоторой проверкой ввода, спасибо.

Kingsolmn 18.11.2011 19:25

Это делает некоторые большие предположения о формате даты и не использует международные стандарты даты.

Henry B 01.02.2018 05:03
function fn_DateCompare(DateA, DateB) {     // this function is good for dates > 01/01/1970

    var a = new Date(DateA);
    var b = new Date(DateB);

    var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate());
    var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate());

    if (parseFloat(msDateA) < parseFloat(msDateB))
      return -1;  // lt
    else if (parseFloat(msDateA) == parseFloat(msDateB))
      return 0;  // eq
    else if (parseFloat(msDateA) > parseFloat(msDateB))
      return 1;  // gt
    else
      return null;  // error
}

Добавление единицы к a/b.getMonth() приводит к тому, что январь, который является 0, становится 1, что переводится как февраль в метод Date.UTC. См. Статью mdn: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…. Раздел о допустимых значениях параметра month. Попробуйте сравнить, например, даты «01.02.2017» и «31.01.2017» с помощью вашей функции.

papiro 26.01.2017 22:49
    function validateform()
    {
     if (trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value) != "") {
   if (!isDate(trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value)))
         msg = msg + "<li>Please enter valid From Date in mm/dd/yyyy format\n";
   else {
       var toDate = new Date();
       var txtdate = document.getElementById("<%=txtFromDate.ClientID %>").value;
       var d1 = new Date(txtdate)
   if (Date.parse(txtdate) > Date.parse(toDate)) {                   
         msg = msg + "<li>From date must be less than or equal to today's date\n";
   }
  }
}

     if (trimAll(document.getElementById("<%=txtToDate.ClientID %>").value) != "") {
            if (!isDate(trimAll(document.getElementById("<%=txtToDate.ClientID %>").value)))
                msg = msg + "<li>Please enter valid To Date in mm/dd/yyyy format\n";
            else {
                var toDate = new Date();
                var txtdate = document.getElementById("<%=txtToDate.ClientID %>").value;
                var d1 = new Date(txtdate)

                if (Date.parse(txtdate) > Date.parse(toDate)) {
                    msg = msg + "<li>To date must be less than or equal to today's date\n"; 
                  }
                 }
                }

Другие вопросы по теме