Soustraire jours à compter d'une date en JavaScript
Quelqu'un connais un moyen facile de prendre une date (par exemple, aujourd'Hui) et pour en revenir à X jours?
Ainsi, par exemple, si je veux calculer la date de 5 jours avant aujourd'hui.
- J'ai trouvé des problèmes à l'aide de la accepté de répondre. Apparemment, l'utilisation de valeurs négatives dans setDate() ne fonctionne pas comme prévu. Voir stackoverflow.com/a/9037132/792287 pour l'autre (mieux?) solution.
- Double Possible: stackoverflow.com/questions/1187824/...
- Vérifier github.com/viebig/datetreta
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela:
Notez que cela modifie la date de l'objet et renvoie la valeur de l'heure de la date de mise à jour.
JS:
new Date(new Date().setDate(new Date().getDate()-5))
- qui seront il y a 5 jours. Dans l'exemple de la réponse, le passer à une nouvelle date pour obtenir un objet date. Doncnew Date(d)
est ce que vous voulez.setDate(-1)
sera de définir la date de dernier jour du moistoString
méthodes commetoISOString
,toDateString
, etc.setDate(0)
il va décrémenter le mois et la date fixée pour le dernier jour de ce mois. Si vous appelezsetDate(30)
sur une date en février, il sera de retourMarch 2nd
. C'est pourquoi lagetDate() - 1
solution fonctionne si vous êtes de passage àsetDate
, mais pas si vous êtes simplement à la recherche pour l'entier de la date d'hier. Dans ce cas, vous devez utiliserd.setDate(d.getDate() - 1).getDate()
normaliser contre le calendrier.setDate(0)
(renvoie toujours le mois précédent, mais vous voyez l'idée).Si vous effectuez beaucoup de headachy date de manipulation tout au long de votre application web, DateJS feront de votre vie beaucoup plus facile:
http://simonwillison.net/2007/Dec/3/datejs/
getTime()
etsetTime()
sont millisecondes depuis l'époque. Il ne devrait pas d'importance si la durée dépasse une année de limite.Il va quelque chose comme ceci:
function getDaysAgo(b){var a=new Date;a.setDate(a.getDate()-b);return a};
puis justevar daysAgo45 = getDaysAgo(45);
J'ai remarqué que le getDays+ X ne fonctionne pas sur jour/mois frontières. À l'aide de getTime fonctionne tant que votre date n'est pas avant 1970.
obtenir moment.js. Tous les enfants cool de l'utiliser. Il a plus d'options de mise en forme, etc. Où
En option! Convertir JS Date obj Angulaire de la liaison.
En option! Format
J'ai fait ce prototype pour la Date pour que je puisse passer des valeurs négatives pour soustraire des jours et des valeurs positives pour ajouter des jours.
Donc, pour l'utiliser, je peux simplement écrire:
d.setDate(d.getDate() + days)
avec des valeurs négatives et positives pour jours pour ajouter et soustraire des jours respectivement. Et il devrait fonctionner sur l'instance (comme d'autres méthodes de Date ne), pas de créer et de retour une copie.Quelques solutions existantes étaient proches, mais pas tout à fait exactement ce que je voulais. Cette fonction est compatible avec à la fois des valeurs positives ou négatives et les poignées limite des cas.
J'aime faire les maths en millisecondes. Donc, utiliser
Date.now()
et si vous aimez formaté
REMARQUE:
Date.now()
ne fonctionne pas dans les navigateurs plus anciens (par exemple, IE8, je pense). Polyfill ici.Mise à JOUR juin 2015
@par socketpair souligné mon laisser-aller. Comme il le dit "un jour dans l'année de 23 heures, et 25 en raison de fuseau horaire règles".
De s'étendre, la réponse ci-dessus auront daylightsaving inexactitudes dans le cas où vous souhaitez calculer le LOCAL jour il y a 5 jours dans un fuseau horaire avec daylightsaving changements et vous
Date.now()
vous donne la temps maintenant, ou.toString()
qui renvoie la date du jour et est donc incompatible avec laDate.now()
date de base en UTC.Cependant, il fonctionne si vous faites vos maths tout en UTC, par exemple,
A. Vous souhaitez l'UTC date de il y a 5 jours à partir de MAINTENANT (UTC)
B. Vous commencez avec un UTC date de base autres que "maintenant", à l'aide de
Date.UTC()
diviser votre date en pièces, puis revenir une nouvelle Date avec les valeurs ajustées
Rappelez-vous que les mois sont en partant de zéro, mais les jours ne le sont pas. à savoir la nouvelle Date(2009, 1, 1) == 01 février 2009, la nouvelle Date(2009, 1, 0) == 31 janvier 2009;
Je trouve un problème avec le getDate()/setDate() la méthode est qu'il est trop facilement transforme tout en millisecondes, et la syntaxe est parfois difficile pour moi de suivre.
Au lieu de cela, j'aime travailler hors le fait que 1 jour = 86,400,000 millisecondes.
Donc, à votre question:
Fonctionne comme un charme.
J'utilise cette méthode tout le temps pour faire rouler 30/60/365 jour des calculs.
Vous pouvez facilement extrapoler cela à créer des unités de temps pour des mois, des années, etc.
JS:
Sans l'aide de la deuxième variable, vous pouvez remplacer 7 pour avec votre dos x jours:
J'ai créé une fonction pour la date de manipulation. vous pouvez ajouter ou soustraire un nombre de jours, d'heures, de minutes.
Maintenant, appeler cette fonction en passant des paramètres. Pour exemple, voici un exemple d'appel de fonction, pour arriver avant la date de 3 jours à partir d'aujourd'hui.
JS:
HTML:
Les réponses les plus fréquentes ont conduit à un bug dans mon code où le premier jour du mois de fixer une date ultérieure pour le mois en cours. Voici ce que j'ai fait,
Un moyen facile de gérer les dates, c'est l'utilisation Moment.js
Vous pouvez utiliser
add
. ExempleDocs http://momentjs.com/docs/#/manipulating/add/
pour moi toutes les combinaisons a bien fonctionné avec le code ci-dessous snipplet ,
l'extrait de code est pour Angulaires-2 mise en œuvre ,
si vous avez besoin d'ajouter des jours , pass positif numberofDays , si vous avez besoin de soustraire pass négatif numberofDays
Je reçois un bon kilométrage de date.js:
http://www.datejs.com/
Nice!
Site web comprend cette beauté:
Si vous voulez soustraire un certain nombre de jours et le format de votre date dans un format lisible par l'homme, vous devriez envisager de créer un personnalisé
DateHelper
objet qui ressemble à quelque chose comme ceci :JS:
(voir aussi ce Violon)
Voir le code suivant, il faut soustraire les jours à partir de la date actuelle. Aussi, réglez le mois, selon les soustrait date.
Lors du réglage de la date, la date convertit en millisecondes, donc vous devez le convertir à une date:
Cette méthode également de prendre en considération, nouvel an, etc.
Vous pouvez à l'aide de Javascript.
Pour PHP,
Espère que ça va vous aider.
J'aime le suivant parce que c'est une ligne. Il n'est pas parfait avec les modifications d'heure d'été mais généralement suffisant pour mes besoins.
J'ai converti en milliseconde et en déduit jours d'autre le mois et l'année ne changera pas et logique
Espoir aide à
JS:
Moderne à l'aide de JavaScript syntaxe de la fonction
JS:
Voir comment vous pouvez trouver les 5 jours avant la date à l'aide de la momentjs.
Essayer quelque chose comme cela
currDate pourrait être n'importe quelle date
limite pourrait être la différence en nombre de jours (positif pour l'avenir et négatif pour le passé)
Je jouais autour et a trouvé une solution simple:
Utilisation
.setDate(+daysCount|-daysCount)
; le symbole=|-
est un must;JS:
Si vous le souhaitez sur une seule ligne à la place.
5 jours à partir d'aujourd'hui
5 jours à partir d'une date spécifique
J'ai écrit une fonction que vous pouvez utiliser.
JS:
JS:
Cela vous donnera 10 derniers jours suite à 110% de travail, vous n'obtiendrez pas n'importe quel type de problème
vous pouvez modifier le soustraire jours en fonction de vos besoins
Il est beaucoup trop compliqué réponses, ce problème peut être facilement résolu par one-liner qui est une combinaison de certains déjà très apprécié des réponses.
Il suffit de soustraire 5 jours * 24 heures * 60 minutes * 60 secondes * 1000 millisecondes à partir de la date actuelle et de créer une nouvelle date à partir de cette valeur.
const fiveDaysAgo = new Date(new Date() - 5*24*60*60*1000)
il ne peut vous donner qu'une date comme 2014-06-20.
espérons, aidera à