103 votes

Comment comparer deux dates string en JavaScript?

J'ai deux dates sous forme de chaînes de caractères au format m/j/aaaa. Par exemple, "11/1/2012", "1/2/2013". Je rédige une fonction en JavaScript pour comparer deux dates sous forme de chaînes de caractères. La signature de ma fonction est bool isLater(string1, string2), si la date passée par string1 est postérieure à la date passée par string2, elle renverra true, sinon false. Ainsi, isLater("1/2/2013", "11/1/2012") devrait retourner true. Comment puis-je écrire une fonction JavaScript pour cela?

0voto

Arlan T Points 1263

Cela a fonctionné pour moi dans nextjs/react

import { format, parse, isBefore } from "date-fns";

...

{isBefore(new Date(currentDate), new Date(date)) ? (
 Événement à venir
) : (
 Événement passé
)}

...

isBefore(date, dateToCompare)

https://date-fns.org/docs/isBefore

-1voto

Ankit Mahala Points 1

Vous pouvez utiliser "Date.parse()" pour comparer correctement les dates, mais comme dans la plupart des commentaires les gens essaient de diviser la chaîne puis d'ajouter les chiffres et de comparer avec une logique manifestement erronée - pas complètement.

Voici la astuce. Si vous divisez la chaîne, comparez les parties dans un format imbriqué.

Comparez l'année avec l'année, le mois avec le mois et le jour avec le jour.

var parts1 = "26/07/2020".split('/');
var parts2 = "26/07/2020".split('/');

var latest = false;

if (parseInt(parts1[2]) > parseInt(parts2[2])) {
    latest = true;
} else if (parseInt(parts1[2]) == parseInt(parts2[2])) {
    if (parseInt(parts1[1]) > parseInt(parts2[1])) {
        latest = true;
    } else if (parseInt(parts1[1]) == parseInt(parts2[1])) {
        if (parseInt(parts1[0]) >= parseInt(parts2[0])) {
            latest = true;
        } 
    }
}

return latest;

-2voto

vitran Points 9

Si votre date n'est pas au format standard yyyy-mm-dd (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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X