J'aimerais obtenir un objet Date qui est 30 minutes plus tard qu'un autre objet Date. Comment faire avec JavaScript?
javascript
date
date-manipulation
Morgan Cheng
la source
la source
date.setMinutes(date.getMinutes() + ...)
ne parviendront pas à franchir les limites de l'heure d'été. Par exemple (en supposant que '2014-03-09' est une limite d'heure d'été):var d = new Date('2014-03-09 01:59:00'), f = new Date(d.getTime()); d.setMinutes(d.getMinutes() + 30);
d
est maintenant 30 minutes plus tôt, pas plus tard quef
.f
etd
, vous verrez l'un dit "GMT-0500" l'autre dit "GMT-0400" (ou quel que soit votre fuseau horaire). De plus, si vous appelez.getTime()
les deuxf
etd
, vous verrez quef
c'est plus grand qued
(c'est-à-dire plus tard).01:89
deviendrait02:29
, ce qui n’existe pas le jour où vous vous élancez. Chrome décide que cela devrait être01:29
, FF décide03:29
. La nuit où vous "reculez", les deux navigateurs sautent l'heure de "repli" et avancent de 90 minutes vers02:29
. Voici quelques démos JSFiddle: "spring forward" / "fall back"Réponses:
Utilisation d'une bibliothèque
Si vous faites beaucoup de travail sur les dates, vous voudrez peut-être regarder dans les bibliothèques de dates JavaScript comme Datejs ou Moment.js . Par exemple, avec Moment.js, c'est simplement:
Vanilla Javascript
C'est comme la réponse du chaos , mais en une seule ligne:
Quelle
diff
est la différence en minutes que vous voulez par rapportoldDateObj
au temps. Cela peut même être négatif.Ou comme fonction réutilisable, si vous devez le faire à plusieurs endroits:
Et juste au cas où cela ne serait pas évident, la raison pour laquelle nous multiplions les minutes
60000
est de convertir les minutes en millisecondes.Soyez prudent avec Vanilla Javascript. Les dates sont difficiles!
Vous pensez peut-être que vous pouvez ajouter 24 heures à une date pour obtenir la date de demain, non? Faux!
Il s'avère que si l'utilisateur observe l'heure d'été, une journée ne dure pas nécessairement 24 heures. Il y a un jour par an qui ne dure que 23 heures et un jour par an qui dure 25 heures. Par exemple, dans la plupart des États-Unis et du Canada, 24 heures après minuit, le 2 novembre 2014 est toujours le 2 novembre:
C'est pourquoi utiliser l'une des bibliothèques susmentionnées est un pari plus sûr si vous devez faire beaucoup de travail avec cela.
Voici une version plus générique de cette fonction que j'ai écrite. Je recommanderais toujours d'utiliser une bibliothèque, mais cela peut être excessif / impossible pour votre projet. La syntaxe est modélisée d'après la fonction MySQL DATE_ADD .
Démonstration de jsFiddle .
la source
la source
Date
objets.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
la source
setTime
retourne un horodatage numérique en millisecondes, pas un objet date. (Ne pensez pas que vous pouvez faire unvar in30Mins = new Date(+new Date() + 1.8e6)
est une doublure, mais je ne suis pas sûr que ce soit mieux qu'une doublure. ;-)la source
setMinutes
renvoie l'horodatage, maisnow
reste l'Date
objet,now = new Date(now)
est donc obsolètePeut-être quelque chose comme ça?
la source
Date
objets.var d = new Date(); d.setMinutes(d.getMinutes() + 30);
If a parameter you specify is outside of the expected range, setMinutes() attempts to update the date information in the Date object accordingly.
Je crée toujours 7 fonctions, pour travailler avec la date dans JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears.
Vous pouvez voir un exemple ici: http://jsfiddle.net/tiagoajacobi/YHA8x/
Comment utiliser:
Ce sont les fonctions:
la source
date.addHours(3, 30)
ajouter 3 heures et 30 minutes. addYears prendrait des années, des mois et des jours, addMonths prendrait des mois et des jours, addMinutes prendrait des minutes, des secondes, des millisecondes, etc.new Date().addHours(4).addMinutes(45);
Vous pouvez en appeler autant que vous le souhaitez, car les méthodes renvoient "this" qui est l'objet Date actuel.var dt = new Date();
alorsdt.addMinutes(45); dt.addHours(4);
ou mêmedt.addMinutes(285);
ou aussidt.addMinutes(45).addHours(4);
tout fonctionnera. Si vous avez une question avec un exemple de code, pour votre problème postez-le ici, je serai heureux de vous aider.La façon la plus simple de résoudre le problème est de reconnaître qu'en javascript, les dates ne sont que des chiffres. Cela commence
0
ou'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
. Chaque1
représente une milliseconde. Vous pouvez ajouter ou soustraire des millisecondes en obtenant la valeur et en instanciant une nouvelle date à l'aide de cette valeur. Vous pouvez le gérer assez facilement avec cet esprit.la source
C'est ce que je fais qui semble assez bien fonctionner:
Ensuite, vous pouvez simplement appeler cela comme ceci:
la source
return new Date(this.getTime() + minutes * 60000);
, je la date de copie provisoire n'est pas nécessaire. ;-)Voici la version ES6 :
Appelez ça comme:
la source
Je pense que beaucoup de réponses ici manquent d'un composant créatif, très nécessaire pour les calculs de voyage dans le temps. Je présente ma solution pour une traduction temporelle de 30 minutes.
(jsfiddle ici )
la source
Pour les paresseux comme moi:
Réponse de Kip (ci-dessus) en coffeescript, utilisant un "enum" et opérant sur le même objet:
la source
Utilisez une bibliothèque existante connue pour gérer les bizarreries impliquées dans le traitement des calculs de temps. Mon préféré actuel est moment.js .
la source
Juste une autre option, que j'ai écrite:
Bibliothèque DP_DateExtensions
C'est exagéré si c'est tout le traitement de date dont vous avez besoin, mais il fera ce que vous voulez.
Prend en charge le formatage date / heure, les calculs de date (ajout / soustraction de parties de date), la comparaison de date, l'analyse de la date, etc. Il est généreusement ouvert.
la source
Vous pouvez faire ceci:
la source
Voici mon one-liner:
la source
Vous devez obtenir la valeur de la date actuelle pour obtenir la date avec (ms) et y ajouter (30 * 60 * 1000). Vous avez maintenant (date actuelle + 30 min) avec ms
la source
Je sais que le sujet est bien trop ancien. Mais je suis à peu près sûr qu'il y a des développeurs qui en ont encore besoin, alors j'ai créé ce script simple pour vous. J'espère que ça vous plait!
la source