Comment obtenir le nombre de jours entre deux dates en JavaScript? Par exemple, étant donné deux dates dans les zones de saisie:
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); // what goes here?
</script>
javascript
date
Michael Haren
la source
la source
Réponses:
Voici une implémentation rapide et sale de
datediff
, comme preuve de concept pour résoudre le problème tel que présenté dans la question. Il repose sur le fait que vous pouvez obtenir les millisecondes écoulées entre deux dates en les soustrayant, ce qui les contraint à leur valeur numérique primitive (millisecondes depuis le début de 1970).Vous devez savoir que les API de date "normales" (sans "UTC" dans le nom) fonctionnent dans le fuseau horaire local du navigateur de l'utilisateur, donc en général, vous pourriez rencontrer des problèmes si votre utilisateur se trouve dans un fuseau horaire que vous n'avez pas attendez-vous, et votre code devra gérer les transitions d'heure d'été. Vous devez lire attentivement la documentation de l'objet Date et de ses méthodes, et pour tout ce qui est plus compliqué, pensez sérieusement à utiliser une bibliothèque qui propose des API plus sûres et plus puissantes pour la manipulation des dates.
Date
- Référence JavaScript MDNDe plus, à des fins d'illustration, l'extrait de code utilise l' accès nommé sur l'
window
objet par souci de concision, mais en production, vous devez utiliser des API standardisées comme getElementById , ou plus probablement, un cadre d'interface utilisateur.la source
parseDate
méthode pour être:return new Date(mdy[2], mdy[1], mdy[0]-1);
Au moment d'écrire ces lignes, une seule des autres réponses gère correctement les transitions DST (heure d'été). Voici les résultats sur un système situé en Californie:
Bien que
Math.round
renvoie les résultats corrects, je pense que c'est un peu maladroit. Au lieu de cela, en prenant explicitement en compte les modifications du décalage UTC au début ou à la fin de l'heure d'été, nous pouvons utiliser l'arithmétique exacte:Explication
Les calculs de date JavaScript sont délicats car les
Date
objets stockent les heures en interne en UTC, pas l'heure locale. Par exemple, 3/10/2013 12:00 AM heure normale du Pacifique (UTC-08: 00) est stockée sous la forme 3/10/2013 8:00 AM UTC et 3/11/2013 12:00 AM Pacific Daylight Time ( UTC-07: 00) est stocké sous la forme 3/11/2013 7:00 AM UTC. Ce jour-là, de minuit à minuit, l'heure locale n'est que de 23 heures en UTC!Bien qu'une journée dans l'heure locale puisse avoir plus ou moins de 24 heures, une journée en UTC est toujours exactement 24 heures. 1 La
daysBetween
méthode illustrée ci-dessus tire parti de ce fait en appelant d'abordtreatAsUTC
pour ajuster les deux heures locales à minuit UTC, avant de soustraire et de diviser.1. JavaScript ignore les secondes intercalaires.
la source
Date.UTC(...)
en premier lieu.Le moyen le plus simple pour faire la différence entre deux dates:
Vous obtenez les jours de différence (ou NaN si l'un ou les deux n'ont pas pu être analysés). La date d'analyse a donné le résultat en millisecondes et pour l'obtenir le jour, vous devez le diviser par 24 * 60 * 60 * 1000
Si vous le souhaitez divisé par jours, heures, minutes, secondes et millisecondes:
Voici ma version refactorisée de la version James:
la source
Je recommande d'utiliser la bibliothèque moment.js ( http://momentjs.com/docs/#/displaying/difference/ ). Il gère correctement l'heure d'été et est généralement génial pour travailler avec.
Exemple:
la source
end.diff(start,"days")
bien que le code écrit fonctionnera car la date de début est postérieure à la date de fin!Je voudrais aller de l'avant et saisir ce petit utilitaire et vous y trouverez des fonctions pour vous. Voici un petit exemple:
la source
Mise à jour: je sais que cela ne fait pas partie de vos questions, mais en général, je ne recommanderais pas de faire de calcul ou de manipulation de date en JavaScript vanilla et d'utiliser plutôt une bibliothèque comme date-fns ou moment.js pour cela en raison de nombreux cas extrêmes .
la source
timeDiff
revenu dans le négatif? Ne devrait pas l'timeDiff
être(new Date(endDate)) - (new Date(startDate));
?(new Date('2017-11-08')) - (new Date('2017-10-01')) // 3283200000
const timeDiff = +(new Date(start)) - +(new Date(end));
return (Date.UTC(yr2, mo2-1, dy2) - Date.UTC(yr1, mo1-1, dy1)) / 86400000;
Utilisation de Moment.js
la source
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 dans JS sont des valeurs datetime.
Ainsi, les calculs de date directs sont incohérents:
par exemple, nous devons convertir la 2e date:
la méthode pourrait être tronquer les moulins aux deux dates:
la source
Mieux vaut se débarrasser de l'heure d'été, Math.ceil, Math.floor etc. en utilisant les heures UTC:
Cet exemple donne une différence de 109 jours.
24*60*60*1000
est un jour en millisecondes.la source
Pour calculer les jours entre 2 dates données, vous pouvez utiliser le code suivant. Les dates que j'utilise ici sont le 1er janvier 2016 et le 31 décembre 2016.
la source
Il est possible de calculer une différence de jours de preuve complète entre deux dates reposant sur différentes ZT en utilisant la formule suivante:
la source
J'ai trouvé cette question lorsque je veux faire un calcul à deux dates, mais la date a une valeur d'heures et de minutes, j'ai modifié la réponse de @ michael-liu pour qu'elle corresponde à mes besoins et elle a réussi mon test.
jours diff
2012-12-31 23:00
et2013-01-01 01:00
devrait être égal à 1. (2 heures) jours diff2012-12-31 01:00
et2013-01-01 23:00
devrait être égal à 1. (46 heures)la source
exemple jsfiddle :)
la source
Je pense que les solutions ne sont pas correctes à 100% J'utiliserais le plafond au lieu du sol , le rond fonctionnera mais ce n'est pas la bonne opération.
la source
Qu'en est- il en utilisant formatDate de widget de DatePicker? Vous pouvez l'utiliser pour convertir les dates au format d'horodatage (millisecondes depuis le 01/01/1970) puis effectuer une simple soustraction.
la source
la source
Ce n'est peut-être pas la solution la plus élégante, mais cela semble répondre à la question avec un peu de code relativement simple, je pense. Ne pouvez-vous pas utiliser quelque chose comme ça:
Cela suppose que vous transmettez des objets de date en tant que paramètres.
la source
Si vous avez deux horodatages Unix, vous pouvez utiliser cette fonction (rendue un peu plus verbeuse pour plus de clarté):
Exemple:
la source
Soyez prudent lorsque vous utilisez des millisecondes .
La date.getTime () renvoie des millisecondes et effectuer une opération mathématique avec des millisecondes nécessite d'inclure
L'exemple du commentaire ci-dessus est la meilleure solution que j'ai trouvée jusqu'à présent https://stackoverflow.com/a/11252167/2091095 . Mais utilisez +1 pour son résultat si vous souhaitez que le compte tous les jours impliqués.
la source
la source
J'ai eu le même problème dans Angular. Je fais la copie car sinon il écrasera la première date. Les deux dates doivent avoir une heure 00:00:00 (évidemment)
la source
J'ai utilisé le code ci-dessous pour expérimenter la fonctionnalité de date de publication pour un article de presse.Je calcule la minute ou l'heure ou le jour ou l'année en fonction de la date de publication et de la date actuelle.
la source
si vous voulez avoir un DateArray avec des dates, essayez ceci:
DebugSnippet
la source
Le moyen simple de calculer les jours entre deux dates est de supprimer les deux composantes de leur temps, c'est-à-dire de régler les heures, les minutes, les secondes et les millisecondes à 0, puis de soustraire leur temps et de le plonger avec des millisecondes d'une journée.
la source
new Date
la source
Simple, simple et sophistiqué. Cette fonction sera appelée toutes les 1 s pour mettre à jour l'heure.
la source
Une meilleure solution par
il renverra 0 si les deux dates sont identiques.
la source
Une contribution, pour une date antérieure au 01/01/1970 et postérieure au 20/01/01
la source
la source
Vous pouvez utiliser UnderscoreJS pour formater et calculer la différence.
Démo https://jsfiddle.net/sumitridhal/8sv94msp/
la source