Comparer deux dates avec JavaScript
Quelqu'un peut-il suggérer un moyen pour comparer les valeurs de deux dates supérieur à, inférieur à, et pas dans le passé, à l'aide de JavaScript? Les valeurs provenant de zones de texte.
- Quand il s'agit de DateTime et la manipulation en JS, je regarde pas plus loin que momentjs 🙂
- pas besoin d'utiliser momentjs de comparer 2 dates. Suffit d'utiliser javascript pure de l'objet Date. Vérifier la principale réponse pour plus de détails.
- Oui comme supplémentaires 20kb minifiés JS pour comparer deux dates.....ridicule
- Vous pouvez consulter réponse suivante : stackoverflow.com/questions/4812152/... Vérifiez getDateDifference et getDifferenceInDays si cela peut aider.
- Je vais vous donner une raison de regarder plus loin que Moment.js (j'adore, MAIS...): Ne pas utiliser pour la lecture en boucle des charges
- Pour un utile pour obtenir le temps différence séparés en unités (secondes, minutes, heures, etc.), voir la réponse à la stackoverflow.com/questions/1968167/.... La réponse est maintenant également disponible à l'adresse stackoverflow.com/a/46529159/3787376.
Vous devez vous connecter pour publier un commentaire.
La Objet Date faire ce que vous souhaitez construire une pour chaque jour, puis de les comparer à l'aide de la
>
,<
,<=
ou>=
.La
==
,!=
,===
, et!==
opérateurs nécessitent l'utilisation dedate.getTime()
comme danspour être clair que la vérification de l'égalité directement avec les objets de données ne fonctionne pas
Je vous suggère d'utiliser les menus déroulants ou d'une même contrainte de la forme de la date d'entrée plutôt que des zones de texte, bien que, de peur que vous vous trouvez dans la validation des entrées de l'enfer.
setHours(0,0,0,0)
de cette façon. Élimine le besoin pour l'appelantsetMinutes()
etc. Aussi, s'exécute plus rapidement.toString()
méthode sur les deux dates, puis de comparer avec la==
opérateur? Semble beaucoup plus facile que de réinitialiser le temps et de comparer par la suite, il y a des inconvénients pour cela?==
opérateur, pas pour les autres. Je suis venu à la conclusion que latoString
méthode fonctionne très bien lorsque l'on compare les si les dates sont exactement les mêmes, cependant, si vous voulez voir si un événement est sur le même jour qu'un autre événement (à des heures différentes) alors vous devez réinitialiser le temps d'abord comme dit ci-dessus..setHours(0,0,0,0)
vous élimine également la nécessité pour .getTime() par exemple:console.log(d1.setHours(0,0,0,0) === d2.setHours(0,0,0,0)); // prints true (correct)
(d1 <= d2) && (d1 >= d2)
impliqued1
"est égal à"d2
var d1 = new Date("2011-11-11");
et un autre avecvar d2 = new Date("11 Nov 2011");
le premier comprenait des informations de temps, tandis que le second n'a pas, de sorte que les comparaisons qui semblait comme ils devraient le travail n'a pas.Le moyen le plus facile de comparer des dates en javascript est d'abord le convertir en un objet Date, puis de comparer ces jour-objets.
Vous trouverez ci-dessous un objet à trois fonctions:
dates.comparer(a,b)
Renvoie un nombre:
dates.inRange (d,début,fin)
Retourne un booléen ou NaN:
dates.convertir
Utilisé par les autres fonctions de convertir leur entrée à un objet date. L'entrée peut être
.
(a > b) - (a < b)
est utile pour trier les dates de tableauArray.prototype.sort
aussi longtemps que toutes les valeurs sont des dates valides. S'il pouvait 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'ensemble de l'instruction return.Comparer
<
et>
comme d'habitude, mais en ce qui concerne la=
devez utiliser un+
préfixe. Comme:Espérons que cette aide!
x.getTime() === y.getTime()
méthode, à la fois lisible et extrêmement rapide voir jsperf+
opérateur tente de convertir l'expression dans un certain Nombre.Date.valueOf()
est utilisé pour la conversion (qui renvoie la même chose queDate.getTime()
.<
,<=
,>
et>=
utiliser le même algorithme (résumé relationnelle de l'algorithme de comparaison) en coulisses.>=
et<=
faire un travail sans un supplément de+
Les opérateurs relationnels
<
<=
>
>=
peuvent être utilisés pour comparer JavaScript dates:Toutefois, les opérateurs d'égalité
==
!=
===
!==
ne peut pas être utilisé pour comparer (la valeur de) dates parce que:Vous pouvez comparer la valeur de dates pour l'égalité à l'aide de l'une de ces méthodes:
Les deux
Date.getTime()
etDate.valueOf()
retourne le nombre de millisecondes depuis le 1er janvier 1970, 00:00 UTC. Les deuxNumber
fonction et unaires+
opérateur d'appel de lavalueOf()
méthodes en coulisses.Thursday, 10 Aug 2017
est format non standard et les différents navigateurs peut analyser les choses différemment, ou pas de l'analyser à tous. Voir les notes sur laDate.parse
.De loin la méthode la plus simple consiste à soustraire une date à partir de l'autre et de comparer le résultat.
JS:
Comparant dates en JavaScript est assez facile... JavaScript a intégré système de comparaison pour dates qui le rend si facile de faire la comparaison...
Il suffit de suivre ces étapes pour comparer 2 dates de valeur, par exemple, vous avez 2 entrées dont chacune a une valeur de Date dans
String
et vous les comparer...1. vous disposez de 2 valeurs de chaîne que vous obtenez à partir d'une entrée et vous aimeriez les comparer, ils sont comme ci-dessous:
2. Ils ont besoin d'être
Date Object
pour pouvoir comparer les valeurs de date, donc, il suffit de les convertir à la date, à l'aide denew Date()
, je viens de re-assigner pour la simplicité des explications, mais vous pouvez le faire de toute façon vous le souhaitez:3. Maintenant, il suffit de comparer, à l'aide de la
>
<
>=
<=
<
,>
,<=
,>=
) utilisé, la Date, les objets sont d'abord converties à l'époque unix (nombre de secondes), et il fonctionne très bien. Cependant cela peut conduire à l'erreur de fairedate1 == date2
où, en effet, une erreur est introduite comme pas la valeur mais l'instance égalité est vérifiée. Pour éviter cela et pour vérifier l'égalité de la valeur de date, ce serait le travail :date1.valueOf() == date2.valueOf()
, ou le plus courtdate1+0 == date2+0
Comparer journée seulement (en ignorant le temps de composants):
Utilisation:
quel format?
Si vous construisez un Javascript Objet Date, vous pouvez juste soustraire pour obtenir une millisecondes de différence (edit: ou tout simplement de les comparer) :
==
comparaison de problème mentionné ci-dessus.vous utilisez ce code,
Et également de vérifier ce lien
http://www.w3schools.com/js/js_obj_date.asp
RÉPONSE COURTE
Ici est une fonction qui retourne {boolean} si le dateTime > dateTime Démonstration en action
Explication
jsFiddle
puisque vous êtes maintenant en ayant à la fois datetime dans le type de numéro
vous pouvez les comparer avec toutes les opérations de Comparaison
( >, < ,= ,!= ,== ,!== ,>= ET <=)
Puis
si vous êtes familier avec
C#
Personnalisé de la Date et de l'Heure Format de la Chaîne de cette bibliothèque doit faire exactement la même chose et vous aider à le format de votre date et heure dtmFRM si vous êtes de passage en date du temps ou chaîne au format unixUtilisation
DÉMO
tout ce que vous avez à faire est de passer aucune de ces format pacifié dans la bibliothèque
js
fichiera
etb
êtreDate
les objets que vous pouvez également utiliserreturn a*1 == b*1;
+a == +b
Remarque - Que De Comparer La Date De La Partie:
Lorsque l'on compare les deux date en javascript. Il faut des heures, des minutes et des secondes aussi en considération.. Donc Si nous avons seulement besoin de comparer uniquement la date, c'est l'approche:
Maintenant:
if date1.valueOf()> date2.valueOf()
va travailler comme un charme.Juste pour ajouter une autre possibilité encore de nombreuses options, vous pourriez essayer:
...qui semble fonctionner pour moi. Bien sûr, vous ne devez veiller à ce que les deux dates ne sont pas non défini...
Cette façon, nous pouvons assurer qu'une comparaison est faite si les deux ne sont pas définis aussi, ou...
...si vous préférez ne pas être égaux.
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
La méthode renvoie 1 si
dateTimeA
est plus grand quedateTimeB
La méthode retourne 0 si
dateTimeA
est égal àdateTimeB
La méthode renvoie -1 si
dateTimeA
est à moins dedateTimeB
Date
objets.<
ou>
les opérateurs lors de moment déjà vient avec la pratique de la comparaison des méthodes telles que.isBefore
et.isAfter
, tout est dans le docsATTENTION LE FUSEAU HORAIRE
Un javascript date a pas de notion de fuseau horaire. C'est un moment dans le temps (les tiques depuis l'époque) avec des fonctions pratiques pour la traduction vers et à partir de chaînes de caractères dans le "local" fuseau horaire. Si vous voulez travailler avec des dates à l'aide de la date d'objets, comme tout le monde ici est en train de faire, vous voulez que vos dates de représenter UTC minuit au début de la date en question. C'est une commune et nécessaire de la convention qui vous permet de travailler avec les dates, quelle que soit la saison ou le fuseau horaire de leur création. Il faut donc être très vigilant pour gérer la notion de fuseau horaire, en particulier lorsque vous créez votre minuit UTC objet Date.
La plupart du temps, vous voulez que votre jour afin de refléter le fuseau horaire de l'utilisateur. Cliquez sur si aujourd'hui est votre anniversaire. Les utilisateurs en nouvelle-zélande et NOUS cliquez en même temps et obtenir des dates différentes. Dans ce cas, de faire...
Parfois, la comparabilité internationale des atouts locaux de précision. Dans ce cas, de faire...
Maintenant, vous pouvez comparer directement à partir de votre date d'objets que les autres réponses suggèrent.
Ayant pris soin de gérer le fuseau horaire lorsque vous créez, vous devez également être sûr de garder le fuseau horaire lorsque vous convertir en une chaîne de caractères de la représentation. De sorte que vous pouvez 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 éviter totalement tout le reste, surtout...
getYear()
,getMonth()
,getDate()
De comparer les deux ce jour, nous pouvons utiliser date.js bibliothèque JavaScript qui peut être trouvé à : https://code.google.com/archive/p/datejs/downloads
et l'utilisation de la
Date.compare( Date date1, Date date2 )
méthode de retour d'un nombre qui signifie le résultat suivant:-1 = date1 est lessthan date2.
0 = valeurs sont égales.
1 = date1 est greaterthan date2.
Soustraire deux dates obtenez la différence dans l'ordre de la milliseconde, si vous obtenez
0
c'est la même dateAfin de créer les dates de texte libre en Javascript, vous devez analyser dans la Date() de l'objet.
Vous pouvez utiliser la Date.parse() qui prend en texte libre tente de le convertir en une nouvelle date, mais si vous avez le contrôle sur la page que je vous conseille d'utiliser l'HTML, sélectionnez les cases à la place ou un sélecteur de date comme le YUI contrôle de calendrier ou la jQuery UI Datepicker.
Une fois que vous avez une date que d'autres personnes l'ont souligné, vous pouvez utiliser un simple calcul arithmétique pour soustraire les dates et le reconvertir en un certain nombre de jours en divisant le nombre (en secondes) par le nombre de secondes dans une journée (60*60*24 = 86400).
Dites que vous avez reçu de la date d'objets A et B, obtenir leur EPOC valeur de temps, puis de soustraire pour obtenir la différence en millisecondes.
C'est tout.
Une version Améliorée du code publié par "certains"
utilisation:
J'ai l'habitude de stocker
Dates
commetimestamps(Number)
dans les bases de données.Quand j'ai besoin de comparer, j'ai simplement comparer parmi ces horodatages ou
convertir en Objet Date et comparer ensuite avec
> <
si nécessaire.Noter que == ou === ne pas fonctionner correctement si les variables sont des références de la même Date Objet.
Convertir ces objets Date d'horodatage(nombre) d'abord, puis de comparer l'égalité d'entre eux.
Date d'Horodatage
Timestamp de la Date
Si la suite est votre format de date, vous pouvez utiliser ce code:
Il va vérifier si
20121121
nombre est plus grand que20121103
ou pas.first == second
oufirst < second
oufirst > second
. C'est l'une des nombreuses beautés avec ISO8601 par rapport à JJ/MM/AA, JJ/MM/AA, JJ/JJ/MM, DD/YY/MM ou MM/JJ/JJ.Avant de comparer les
Dates
objet, essayez d'installer les deux de leur millisecondes à zéro commeDate.setMilliseconds(0);
.Dans certains cas où le
Date
objet est créé dynamiquement en javascript, si vous gardez l'impression de laDate.getTime()
, vous verrez les millisecondes évolution, ce qui permettra d'éviter l'égalité des deux dates.Utiliser ce code pour comparer la date à l'aide de javascript.
Merci
D. Jeeva
Voici ce que j'ai fait dans un de mes projets,
l'appel de cette form onsubmit.
espérons que cette aide.
Supposons que vous traitez avec ce
2014[:-/.]06[:-/.]06
ou ce06[:-/.]06[:-/.]2014
format de date, puis vous pouvez comparer les dates de cette façonComme vous pouvez le voir, nous avons la bande de séparation(s), puis de comparer des nombres entiers.
Salut Voici mon code pour comparer des dates . Dans mon cas, je suis en train de faire un chèque pour ne pas permettre de sélectionner les dates antérieures.
Une autre façon de comparer deux dates, c'est par la
toISOString()
méthode. Ceci est particulièrement utile lors de la comparaison à une date fixe conservés dans une chaîne de caractères, puisque vous pouvez éviter de créer un objet éphémère. En vertu de la norme ISO 8601, vous pouvez comparer ces chaînes lexicographiquement (au moins quand vous utilisez le même fuseau horaire).Je ne suis pas nécessairement dire que c'est mieux que d'utiliser des temps, des objets ou des horodateurs; simplement offrir une autre option. Il pourrait y avoir des cas limites où elle pouvait échouer, mais je n'ai pas tombé sur eux 🙂
Vous pouvez date comparer comme la plupart de manière simple et compréhensible comme.
supposons que vous avez deux date d'entrée que vous souhaitez comparer.
donc tout d'abord écrire une méthode commune pour analyser ce jour.
parseDate() est la marque commune de méthode pour l'analyse de la date.
maintenant, vous pouvez vérifie votre date =, > ,< n'importe quel type de comparer
Pour Assurer que ce code va vous aider.
La manière la plus simple est,
essayer cette
alors que de comparer la date devrait être la norme iso format "aaaa-MM-jj"
si vous voulez comparer uniquement les dates d'utiliser cette datehelper
Essayez d'utiliser ce code
getMinutes
,getSeconds
, etc méthodes.Dates de comparaison: