Bonsoir,

j'aimerais comparer deux dates. L'une récupérée depuis une API sous cette forme 2015-02-21 23:59:59 (date qui est attribué en lors de l'insertion dans ma DB) et l'autre en JS (date en cours).

J'aimerais comparer ces deux dates afin de voir si la date en cours n'est pas supérieure à la date reçue de mon API.

Donc mon API me retourne 2015-02-21 23:59:59 et en JS, je fais ceci

var myDate = new Date();

ce qui me retourne "Mon Feb 16 2015 20:58:00 GMT+0100 (Paris, Madrid)" mais je ne vois pas comment "traîter" ces dates pour les comparer.

Un ptit coup de main ? :)

7 réponses


Ce sont des objets donc les comparer directement me semble impossible. Ce que je ferais éventuellement c'est de les formater de la même façon dans le genre "23/01/2015", puis de les convertir en chaîne de caractère.

Bonsoir.
Regarde ici par exemple : MDN » Date : Lecture (getters).

@Bakar, ne JAMAIS comparer des dates en String !!! Il existe de bien meilleures méthodes !

Le mieux est de setter ta date PHP en date JS et de les comparer par timestamp

// dateFromApiResult peut être un String, l'objet Date de JS peut le parser
var apiDate = new Date(dateFromApiResult)
var now = new Date()

var isApiDateOlder = apiDate.getTime() < now.getTime()

Un des soucis que tu peux rencontrer va être le fait que new Date() ne sache pas parser ta date PHP, dans ce cas, c'est à toi de redéfinir le format dans ton application serveur.

Pour ma part, j'utilise la norme ISO-8601 pour les dates, c'est compris par tous les langages.

Si tu veux être tranquille avec tout ça, il y a http://momentjs.com/

Merci prbaron, c'est bon à savoir.

Une autre solution serait en JS de récupérer un timestamp (var date = new Date().getTime()) de l'envoyer au serveur et comparer avec le timestamp côté serveur.

S'il veut faire la comparaison côté client ça me semble surcharger pour rien.

Ah ok je pensais que c'était côté serveur. Après ça peut toujours se faire un print e php d'une date en timestamp revient au même. Mais oui après il y a plusieurs solutions viables à ce problème.