Quelqu'un peut-il suggérer un moyen de comparer les valeurs de deux dates supérieures à, inférieures à et non dans le passé en utilisant JavaScript? Les valeurs proviendront des zones de texte.
1953
Quelqu'un peut-il suggérer un moyen de comparer les valeurs de deux dates supérieures à, inférieures à et non dans le passé en utilisant JavaScript? Les valeurs proviendront des zones de texte.
Réponses:
L' objet Date fera ce que vous voulez - construire un pour chaque date, puis de les comparer en utilisant la
>
,<
,<=
ou>=
.Le
==
,!=
,===
, et les!==
opérateurs vous obligent à utiliserdate.getTime()
commepour être clair, il suffit de vérifier l'égalité directement avec les objets de date ne fonctionnera pas
Je vous suggère d'utiliser des listes déroulantes ou une forme similaire de saisie de date plutôt que des zones de texte, de peur de vous retrouver dans l'enfer de la validation des entrées.
la source
setHours(0,0,0,0)
cette façon. Élimine le besoin d'appeler,setMinutes()
etc. Exécute également plus rapidement.toString()
méthode aux deux dates et comparer ensuite avec l'==
opérateur? Semble beaucoup plus facile que de réinitialiser l'heure et de comparer ensuite, y a-t-il des inconvénients à cela?Le moyen le plus simple de comparer des dates en javascript est de le convertir d'abord en objet Date, puis de comparer ces objets de date.
Ci-dessous vous trouvez un objet avec trois fonctions:
dates.compare (a, b)
Renvoie un nombre:
dates.inRange (d, début, fin)
Renvoie un booléen ou NaN:
dates.convert
Utilisé par les autres fonctions pour convertir leur entrée en objet date. L'entrée peut être
.
la source
(a > b) - (a < b)
est utile pour trier le tableau des datesArray.prototype.sort
tant que toutes les valeurs sont des dates valides. S'il pourrait y avoir des dates non valides, je recommande d' utiliser quelque chose commefunction ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
return a - b
est plus simple et remplace l'intégralité de l'instruction return.Comparez
<
et>
comme d'habitude, mais tout ce qui implique=
doit utiliser un+
préfixe. Ainsi:J'espère que cela t'aides!
la source
x.getTime() === y.getTime()
méthode, à la fois lisible et extrêmement rapide voir jsperf+
opérateur tente de convertir l'expression en un nombre.Date.valueOf()
est utilisé pour la conversion (qui renvoie la même chose queDate.getTime()
.<
,<=
,>
Et>=
utiliser le même algorithme ( algorithme de comparaison abstraite relationnelle ) dans les coulisses.Les opérateurs relationnels
<
<=
>
>=
peuvent être utilisés pour comparer des dates JavaScript:Cependant, les opérateurs d'égalité
==
!=
===
!==
ne peuvent pas être utilisés pour comparer (la valeur de) les dates car :Vous pouvez comparer la valeur des dates pour l'égalité à l'aide de l'une de ces méthodes:
Les deux
Date.getTime()
etDate.valueOf()
retournent le nombre de millisecondes depuis le 1er janvier 1970 à 00h00 UTC. LaNumber
fonction et l'+
opérateur unaire appellent lesvalueOf()
méthodes dans les coulisses.la source
Thursday, 10 Aug 2017
est un format non standard et différents navigateurs peuvent l'analyser différemment, ou ne pas l'analyser du tout. Voir les notes surDate.parse
.La méthode de loin la plus simple consiste à soustraire une date de l'autre et à comparer le résultat.
la source
En comparant les dates en JavaScript est assez facile ... JavaScript a intégré le système de comparaison pour les dates qui le rend si facile à faire la comparaison ...
Suivez simplement ces étapes pour comparer la valeur de 2 dates, par exemple vous avez 2 entrées qui ont chacune une valeur de date
String
et vous pour les comparer ...1. vous avez 2 valeurs de chaîne que vous obtenez à partir d'une entrée et vous souhaitez les comparer, elles sont comme ci-dessous:
2. Ils doivent
Date Object
être comparés en tant que valeurs de date, alors convertissez-les simplement en date, en utilisantnew Date()
, je les réattribue simplement pour des raisons d'explication, mais vous pouvez le faire comme vous le souhaitez:3. Maintenant, comparez-les simplement en utilisant
>
<
>=
<=
la source
<
,>
,<=
,>=
) utilisé, les objets de date sont d' abord converties époque unix (secondes), et il fonctionne très bien. Cependant, cela pourrait conduire à l'erreur courante de fairedate1 == date2
où en effet une erreur est introduite comme non la valeur mais l'égalité d'instance est vérifiée. Pour éviter cela et vérifier l'égalité de la valeur de date cela fonctionnerait:date1.valueOf() == date2.valueOf()
, ou moinsdate1+0 == date2+0
Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.
etNote: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
Comparer uniquement le jour (en ignorant la composante temps):
Usage:
la source
quel format?
Si vous construisez un objet Javascript Date , vous pouvez simplement les soustraire pour obtenir une différence de quelques millisecondes (modifier: ou simplement les comparer):
la source
==
problème de comparaison mentionné ci-dessus.vous utilisez ce code,
Et vérifiez également ce lien http://www.w3schools.com/js/js_obj_date.asp
la source
RÉPONSE COURTE
Voici une fonction qui retourne {boolean} si la démo from dateTime> to dateTime en action
Explication
jsFiddle
puisque vous avez maintenant les deux datetime dans le type de nombre, vous pouvez les comparer avec toutes les opérations de comparaison
(>, <, =,! =, ==,! ==,> = ET <=)
alors
Si vous connaissez la
C#
chaîne de format de date et d'heure personnalisée, cette bibliothèque devrait faire exactement la même chose et vous aider à formater votre date et heure dtmFRM, que vous passiez une chaîne de date et d'heure ou un format Unix.Usage
DEMO
tout ce que vous avez à faire est de passer l'un de ces formats pacifiés dans le
js
fichier de bibliothèquela source
La manière simple est,
la source
Remarque - Comparer uniquement la date:
Lorsque nous comparons deux dates en javascript. Cela prend des heures, des minutes et des secondes également à prendre en compte. Donc, si nous devons seulement comparer la date seulement, voici l'approche:
Maintenant:
if date1.valueOf()> date2.valueOf()
fonctionnera comme un charme.la source
la source
a
et enb
étant desDate
objets que vous pouvez également utiliserreturn a*1 == b*1;
+a == +b
la source
Juste pour ajouter encore une autre possibilité aux nombreuses options existantes, vous pouvez essayer:
... qui semble fonctionner pour moi. Bien sûr, vous devez vous assurer que les deux dates ne sont pas indéfinies ...
De cette façon, nous pouvons nous assurer qu'une comparaison positive est faite si les deux ne sont pas définis également, ou ...
... si vous préférez qu'ils ne soient pas égaux.
la source
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
La méthode renvoie 1 si
dateTimeA
est supérieur àdateTimeB
La méthode renvoie 0 si
dateTimeA
égal àdateTimeB
La méthode renvoie -1 si
dateTimeA
est inférieur àdateTimeB
la source
Date
objets.<
ou>
alors que le moment est déjà venu avec des méthodes de comparaison pratiques telles que.isBefore
et.isAfter
, tout est dans la documentationATTENTION À LA FUSEAU HORAIRE
Une date javascript n'a aucune notion de fuseau horaire . C'est un moment dans le temps (ticks depuis l'époque) avec des fonctions pratiques pour traduire vers et depuis des chaînes dans le fuseau horaire "local". Si vous souhaitez travailler avec des dates à l'aide d'objets de date, comme tout le monde ici, vous voulez que vos dates représentent UTC à minuit au début de la date en question. Il s'agit d'une convention courante et nécessaire qui vous permet de travailler avec des dates indépendamment de la saison ou du fuseau horaire de leur création. Vous devez donc être très vigilant pour gérer la notion de fuseau horaire, en particulier lorsque vous créez votre objet Date UTC à minuit.
La plupart du temps, vous souhaiterez que votre date reflète le fuseau horaire de l'utilisateur. Cliquez si aujourd'hui est votre anniversaire . Les utilisateurs en NZ et aux États-Unis cliquent en même temps et obtiennent des dates différentes. Dans ce cas, faites ceci ...
Parfois, la comparabilité internationale l'emporte sur la précision locale. Dans ce cas, faites ceci ...
Vous pouvez maintenant comparer directement vos objets de date comme le suggèrent les autres réponses.
Après avoir pris soin de gérer le fuseau horaire lors de la création, vous devez également vous assurer de ne pas afficher le fuseau horaire lors de la reconversion en une représentation sous forme de chaîne. Vous pouvez donc utiliser en toute sécurité ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
Et évitez totalement tout le reste, surtout ...
getYear()
,getMonth()
,getDate()
la source
Supposons que vous ayez les objets de date A et B, obtenez leur valeur de temps EPOC, puis soustrayez pour obtenir la différence en millisecondes.
C'est tout.
la source
Pour comparer deux dates, nous pouvons utiliser la bibliothèque JavaScript date.js qui se trouve à l' adresse : https://code.google.com/archive/p/datejs/downloads
et utilisez la
Date.compare( Date date1, Date date2 )
méthode et elle renvoie un nombre qui signifie le résultat suivant:-1 = date1 est inférieure à date2.
0 = les valeurs sont égales.
1 = date1 est supérieure à date2.
la source
Soustrayez deux dates pour obtenir la différence en millisecondes, si vous obtenez
0
c'est la même datela source
Afin de créer des dates à partir de texte libre en Javascript, vous devez l'analyser dans l'objet Date ().
Vous pouvez utiliser Date.parse () qui prend du texte libre essaie de le convertir en une nouvelle date, mais si vous avez le contrôle sur la page, je recommanderais d'utiliser des zones de sélection HTML à la place ou un sélecteur de date tel que le contrôle du calendrier YUI ou l' interface utilisateur jQuery Datepicker .
Une fois que vous avez une date, comme d'autres l'ont souligné, vous pouvez utiliser une simple arithmétique pour soustraire les dates et la reconvertir en nombre de jours en divisant le nombre (en secondes) par le nombre de secondes dans une journée (60 * 60 * 24 = 86400).
la source
la source
Une version améliorée du code posté par "certains"
usage:
la source
Si votre format de date est le suivant, vous pouvez utiliser ce code:
Il vérifiera si le
20121121
nombre est supérieur20121103
ou non.la source
first == second
oufirst < second
oufirst > second
. C'est l'une des nombreuses beautés avec ISO8601 par rapport à MM / DD / YY, DD / MM / YY, YY / DD / MM, DD / YY / MM ou MM / YY / DD.Je stocke généralement
Dates
commetimestamps(Number)
dans les bases de données.Quand j'ai besoin de comparer, je compare simplement entre ces horodatages ou
convertissez-le en objet de date et comparez-le
> <
si nécessaire.Notez que == ou === ne fonctionne pas correctement sauf si vos variables sont des références du même objet Date.
Convertissez d'abord ces objets Date en horodatage (nombre), puis comparez leur égalité.
Date à l'horodatage
Horodatage à ce jour
la source
Avant de comparer l'
Dates
objet, essayez de mettre leurs deux millisecondes à zéro commeDate.setMilliseconds(0);
.Dans certains cas où l'
Date
objet est créé dynamiquement en javascript, si vous continuez à imprimer leDate.getTime()
, vous verrez les millisecondes changer, ce qui empêchera l'égalité des deux dates.la source
Performance
Aujourd'hui 2020.02.27 j'effectue des tests des solutions choisies sur Chrome v80.0, Safari v13.0.5 et Firefox 73.0.1 sur MacOs High Sierra v10.13.6
Conclusions
d1==d2
(D) etd1===d2
(E) sont les plus rapides pour tous les navigateursgetTime
(A) est plus rapide quevalueOf
(B) (les deux sont moyennement rapides)Détails
Les solutions d'extraits de code utilisées dans les tests de performances sont présentées ci-dessous. Vous pouvez effectuer un test sur votre machine ICI
Afficher l'extrait de code
Résultats pour chrome
la source
d1==d2
oud1===d2
est inutile dans le contexte de la question.Utilisez ce code pour comparer la date à l'aide de javascript.
Merci D.Jeeva
la source
la source
Voici ce que j'ai fait dans l'un de mes projets,
appelant ceci sur le formulaire onsubmit. J'espère que cela t'aides.
la source