web-dev-qa-db-fra.com

Comment faire une comparaison de date en Javascript?

Duplicate possible:
Comparez 2 dates avec JavaScript

Je voudrais comparer deux dates en javascript. J'ai fait des recherches, mais tout ce que je peux trouver, c'est comment renvoyer la date actuelle. Je veux comparer 2 dates distinctes, non liées à aujourd'hui. Comment je fais ça.

var startDate = Date(document.form1.Textbox2);
105
Lulu Ket
if (date1.getTime() > date2.getTime()) {
    alert("The first date is after the second date!");
}

référence à l'objet Date

219
matt b
new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf()
15
Vladimir Shmidt

Les dates de JavaScript peuvent être comparées à l'aide des mêmes opérateurs de comparaison que les autres types de données:>, <, <=,> =, ==,! =, ===,! ==.

Si vous avez deux dates A et B, alors A <B si A est plus loin dans le passé que B.

Mais il semble que le problème avec lequel vous rencontrez des difficultés soit de transformer une chaîne en date. Vous faites cela en passant simplement la chaîne en tant qu'argument pour une nouvelle Date:

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

ou, si la chaîne que vous voulez est la valeur d'un champ de formulaire, comme cela semble être le cas:

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

Si cette chaîne n'est pas quelque chose que JavaScript reconnaît comme une date, vous obtiendrez toujours un objet Date, mais ce sera "invalide". Toute comparaison avec une autre date retournera faux. Une fois converti en chaîne, il devient "Date invalide". Sa fonction getTime () retournera NaN, et l'appel de isNaN () à la date elle-même retournera true; c'est le moyen facile de vérifier si une chaîne est une date valide.

9
Will Wagner

Vous pouvez utiliser la méthode getTime () sur un objet Date pour obtenir l’horodatage (en millisecondes) par rapport au 1er janvier 1970. Si vous convertissez vos deux dates en horodatages entiers, vous pouvez ensuite comparer la différence en les soustrayant. Le résultat sera en millisecondes, il suffit donc de diviser par 1000 pour les secondes, puis 60 pour les minutes, etc.

4
Marc Novakowski

Je préférerais utiliser la méthode Date valueOf au lieu de === ou! ==

On dirait que === compare les références internes de l'objet et rien concernant la date.

2
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
}
1
Stephen Moreno
    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"; 
                  }
                 }
                }
0
priyanka gaby

Vous pouvez essayer ce code pour vérifier quelle valeur de date est la plus élevée parmi deux dates au format MM/JJ/AAAA:

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

/ * pour vérifier ceci .... créer un formulaire et donner l'identifiant à deux entrées de date. Le format de date doit être mm/jj/aaaa ou mm-jj-aaaa ou mm: jj: aaaa ou mm.dj.aaaa comme ceci . * /

0
SHIBIN FRANCIS

Vous pouvez essayer d'ajouter le code de script suivant pour implémenter ceci:

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;
}  
0
Harsh Punnoose