web-dev-qa-db-fra.com

comment comparer deux dates de chaîne en javascript?

J'ai deux dates de chaîne au format m/j/aaaa. Par exemple, «11/1/2012», «1/2/2013». J'écris une fonction en JavaScript pour comparer deux dates de chaîne. La signature de ma fonction est bool isLater(string1, string2), si la date passée par chaîne1 est postérieure à la date passée par chaîne2, elle retournera true, sinon false ./1/2012 ”) devrait retourner vrai. Comment écrire une fonction JavaScript pour cela?

31
GLP
var d1 = Date.parse("2012-11-01");
var d2 = Date.parse("2012-11-04");
if (d1 < d2) {
    alert ("Error!");
}

Demo Jsfiddle

60
Garry

Analyser les dates et les comparer comme vous le feriez:

function isLater(str1, str2)
{
    return new Date(str1) > new Date(str2);
}

Si vous devez prendre en charge un autre format de date, considérez une bibliothèque telle que date.js .

6
Matt Zeunert

Vous pouvez simplement comparer 2 chaînes

function isLater(dateString1, dateString2) {
  return dateString1 > dateString2
}

Ensuite

isLater("2012-12-01", "2012-11-01")

retourne vrai tant que

isLater("2012-12-01", "2013-11-01")

retourne faux

2
fuyi

Si votre date n'est pas au format standard aaaa-mm-jj (2017-02-06), par exemple 20/06/2016 Vous pouvez utiliser ce code

var parts ='01/07/2016'.val().split('/');
var d1 = Number(parts[2] + parts[1] + parts[0]);
parts ='20/06/2016'.val().split('/');
var d2 = Number(parts[2] + parts[1] + parts[0]);
return d1 > d2
0
vitran

L'analyse directe d'une chaîne de date qui n'est pas au format aaaa-mm-jj, comme dans la réponse acceptée ne fonctionne pas. La réponse de vitran fonctionne, mais JQuery est mélangé, je l'ai donc retravaillée un peu.

// Takes two strings as input, format is dd-mm-yyyy
// returns true if d1 is smaller than or equal to d2

function compareDates(d1, d2){
var parts =d1.split('/');
var d1 = Number(parts[2] + parts[1] + parts[0]);
parts = d2.split('/');
var d2 = Number(parts[2] + parts[1] + parts[0]);
return d1 <= d2;
}

P.S. aurait commenté directement au post de vitran mais je n'ai pas le représentant pour le faire.

0
Steven Kuipers