Comment puis-je obtenir le nombre de jours entre deux dates en JavaScript?
Comment puis-je obtenir le nombre de jours entre deux dates en JavaScript? Par exemple, pour deux dates dans des boîtes d'entrée:
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); //what goes here?
</script>
- 99% des cas où l'utilisateur demande pour le "nombre de jours entre deux dates" ce qu'elle ne comprends pas, c'est qu'elle est en train de comparer des pommes avec des poires. Le problème devient si simple si on lui demande "Combien de DATES sont là, dans une PLAGE de dates?", Ou combien de carrés que j'ai de la croix sur le calendrier. Cela laisse hors du temps et de l'heure d'été à des questions etc etc.La confusion est implicite sur nous à cause de la structure de données datetime qui est un pur non-sens. Il n'y a pas une telle chose comme datetime il est jour, et il est temps, deux objets distincts à la fois la nature et le comportement
- Pour une fonction qui divise la différence dans (toute) unités de temps, utilisez la réponse à stackoverflow.com/a/53092438/3787376.
- Je sens que cette question devrait être supprimé ou au moins la mention "éviter" que la plupart des réponses sont incorrectes ou dépendent de plusieurs bibliothèques.
Vous devez vous connecter pour publier un commentaire.
Ici est un rapide et sale mise en œuvre de
datediff
, comme une preuve de concept pour résoudre le problème présenté dans la question. Il s'appuie sur le fait que vous pouvez obtenir le temps écoulé en millisecondes) entre deux dates en les soustrayant, qui contraint dans leur primitive nombre valeur (en millisecondes depuis le début des années 1970).JS:
HTML:
Vous devez être conscient que la "normale" Date d'Api (sans "UTC" dans le nom) opère dans le fuseau horaire local du navigateur de l'utilisateur, donc, en général, vous pouvez rencontrer des problèmes si votre utilisateur est dans un fuseau horaire que vous ne vous attendez pas, et votre code devra composer avec l'Heure d'été transitions. Vous devez lire attentivement la documentation de la Date de l'objet et de ses méthodes, et pour quelque chose de plus compliqué, fortement envisager d'utiliser une bibliothèque qui offre plus de sécurité et de puissantes Api pour la date de manipulation.
Date
-- MDN référence JavaScripten outre, à des fins d'illustration, l'extrait de code utilise accès nommés sur les
window
de l'objet pour des raisons de concision, mais en production, vous devez utiliser des Api standardisées comme getElementById, ou, plus probablement, certains framework d'INTERFACE.parseDate
méthode:return new Date(mdy[2], mdy[1], mdy[0]-1);
De cette écriture, un seul des autres réponses gère correctement l'heure d'été (daylight saving time) des transitions. Voici les résultats sur un système qui se trouve dans l'état de Californie:
Bien que
Math.round
renvoie des résultats corrects, je pense que c'est un peu maladroit. Au lieu de cela, explicitement, de la comptabilité pour la modification du décalage UTC lorsque l'heure d'été commence ou se termine, nous pouvons utiliser exacte de l'arithmétique:Explication
JavaScript date de calculs sont difficiles parce que
Date
objets magasin de temps à l'interne en UTC, pas de temps local. Par exemple, 3/10/2013 12:00 AM, Heure normale du Pacifique (UTC-08:00) est stockée en tant que 3/10/2013 8:00 AM UTC, et 3/11/2013 12:00 AM, Heure Avancée du Pacifique (UTC-07:00) est stockée en tant que 3/11/2013 7:00 AM UTC. En ce jour, de minuit à minuit, heure locale, il est seulement de 23 heures au format UTC!Bien qu'un jour dans l'heure locale peut avoir plus ou moins de 24 heures, un jour à l'UTC est toujours exactement 24 heures.1 La
daysBetween
méthode indiquée ci-dessus prend le parti de ce fait en appelant d'abordtreatAsUTC
à ajuster l'heure locale à minuit UTC, avant soustraction et la division.1. JavaScript ignore les secondes intercalaires.
Date.UTC(...)
en premier lieu.La meilleure façon d'obtenir la différence entre deux dates:
Vous obtenez la différence des jours (ou NaN si l'un ou les deux ne pouvaient pas être analysé). L'analyse date donne le résultat en millisecondes et de l'obtenir par jour, vous avez divisé par 24 * 60 * 60 * 1000
Si vous le souhaitez divisé en jours, heures, minutes, secondes et millisecondes:
Voici ma version remaniée de James version:
Je recommande l'utilisation de la moment.js bibliothèque (http://momentjs.com/docs/#/displaying/difference/). Il gère l'heure d'été correctement et, en général, est très agréable de travailler avec.
Exemple:
end.diff(start,"days")
bien que le code écrit, le travail parce que la date de début est après la date de fin!Je voudrais aller de l'avant et prenez ce petit utilitaire et en lui, vous trouverez les fonctions de ce pour vous. Voici un court exemple:
À L'Aide De Moment.js
JS:
HTML:
var now = moment(), yearStart = moment().startOf('year'); var ytdDays = now.diff(yearStart, 'days'); // this can be years, months, weeks, days, hours, minutes, and seconds console.log(ytdDays);
plus ici: momentjs.comLes valeurs de Date en JS sont des valeurs datetime.
Donc, direct date de calculs sont incompatibles:
par exemple nous avons besoin de convertir de la 2e date:
la méthode pourrait être tronquer les moulins de deux dates:
JS:
Mieux pour se débarrasser de l'heure d'été, les Maths.ceil, les Maths.le sol etc. en utilisant des temps UTC:
Cet exemple donne de différence 109 jours.
24*60*60*1000
est un jour en millisecondes.Pour Calculer le nombre de jours entre 2 dates, vous pouvez utiliser le code suivant.Les Dates que j'utilise ici sont 01 Jan 2016 et le 31 Décembre 2016
JS:
HTML:
Il est possible de calculer une preuve complète les jours de la différence entre deux dates de repos à travers les différents TZs à l'aide de la formule suivante:
JS:
J'ai trouvé cette question quand je veux faire quelque calculer sur deux jour, mais le jour des heures et des minutes en valeur, j'ai modifié @michael-liu 's réponse pour s'adapter à mon exigence, et il a passé mon test.
diff jours
2012-12-31 23:00
et2013-01-01 01:00
doit être égale à 1. (2 heures)diff jours
2012-12-31 01:00
et2013-01-01 23:00
doit être égale à 1. (46 heures)Je pense que les solutions ne sont pas correct à 100% je voudrais utiliser ceil au lieu de étage, ronde va fonctionner, mais il n'est pas le bon fonctionnement.
Que sur l'utilisation de formatDate de composant? Vous pouvez l'utiliser pour convertir les dates en timestamp format (millisecondes écoulées depuis le 01/01/1970) et ensuite de faire une simple soustraction.
jsfiddle exemple 🙂
JS:
Cela peut ne pas être la solution la plus élégante, mais il semble que pour répondre à la question relativement simple bout de code, je pense. Ne pouvez-vous pas utiliser quelque chose comme ceci:
C'est en supposant que vous êtes de passage à jour des objets comme paramètres.
Être prudent lors de l' à l'aide de millisecondes.
La date.getTime() retourne millisecondes et faire opération mathématique avec millisecondes nécessite d'inclure
L'exemple de commentaire ci-dessus est la meilleure solution que j'ai trouvé jusqu'à présent
https://stackoverflow.com/a/11252167/2091095 . Mais l'utilisation +1 à son résultat, si vous voulez la pour compter tous les jours concernés.
JS:
J'ai eu le même problème dans Angulaire. Je fais le copier car sinon il remplacera le premier jour. Les deux dates doivent avoir le temps 00:00:00 (évidemment)
Si vous avez deux timestamps unix, vous pouvez utiliser cette fonction (rendu un peu plus détaillé pour des raisons de clarté):
Exemple:
J'ai utilisé le code ci-dessous pour expérimenter la date de validation de la fonctionnalité d'un communiqué de la poste.- Je calculer à la minute ou à l'heure ou à la journée ou de l'année en fonction de la date de publication et la date actuelle.
si vous voulez avoir une DateArray avec des dates, essayez ceci:
DebugSnippet
La façon simple de calculer le nombre de jours entre deux dates est de supprimer à la fois de leur temps composant c'est à dire le réglage des heures, minutes, secondes et millisecondes à 0 et puis en soustrayant de leur temps et de la plongée avec millisecondes valeur d'une journée.
Une Meilleure Solution par
il retourne 0 si les deux dates sont identiques.
JS:
HTML:
Une contribution, pour la date avant de 1970-01-01 et après 2038-01-19
Vous pouvez utiliser UnderscoreJS pour la mise en forme et de calcul de différence.
Démo https://jsfiddle.net/sumitridhal/8sv94msp/
JS:
CSS:
HTML:
Bookmarklet la version des autres réponses, vous invitant pour les deux dates:
J'ai seulement eu deux horodateurs dans l'ordre de la milliseconde, donc je dois faire quelques étapes supplémentaires avec moment.js pour obtenir les jours entre.
J'ai eu le même problème, mais c'est mieux si tu le fait sur Requête SQL :
la requête va automatiquement générer une colonne
CountDays
Cette réponse, basée sur une autre (lien à la fin), est à propos de la différence entre deux dates.
Vous pouvez voir comment cela fonctionne parce que c'est simple, il comprend également le fractionnement de la différence dans l'
les unités de temps (une fonction que j'ai fait) et de la conversion à l'UTC pour arrêter des problèmes de fuseau horaire.
JS:
Comment mon code ci-dessus fonctionne
Une date/heure différence, comme le nombre de millisecondes, peut être calculée à l'aide de la Date objet:
Ensuite de déterminer le nombre de secondes dans de la différence, de le diviser par 1000 pour convertir
quelques millisecondes à quelques secondes, puis changez le résultat d'un nombre entier) pour supprimer
les millisecondes (fraction qui décimal):
var seconds = parseInt(diff/1000)
.Aussi, j'ai pu obtenir plus d'unités de temps à utiliser le même processus, par exemple:
- (ensemble) minutes, en divisant secondes par 60, et de changer le résultat à un nombre entier,
- heures, en divisant minutes par 60, et de changer le résultat à un nombre entier.
J'ai créé une fonction pour faire ce processus de fractionnement de la différence dans l'
l'ensemble des unités de temps, nommé
split_to_whole_units
, avec cette démo:Cette réponse est fondée sur cette autre.
J'ai pris un peu d'inspiration à partir d'autres réponses et fait de l'entrée automatique de l'assainissement. J'espère que cela fonctionne bien comme une amélioration par rapport à d'autres réponses.
JS:
HTML:
Facile Simple et sophistiqué. Cette fonction sera appelée à chaque 1 seconde de temps de mise à jour.