Quelqu'un connaît-il un moyen facile de prendre une date (par exemple aujourd'hui) et de remonter X jours en arrière?
Ainsi, par exemple, si je veux calculer la date 5 jours avant aujourd'hui.
Quelqu'un connaît-il un moyen facile de prendre une date (par exemple aujourd'hui) et de remonter X jours en arrière?
Ainsi, par exemple, si je veux calculer la date 5 jours avant aujourd'hui.
Réponses:
Essayez quelque chose comme ceci:
var d = new Date();
d.setDate(d.getDate()-5);
Notez que cela modifie l'objet date et renvoie la valeur d'heure de la date mise à jour.
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 5);
document.write('<br>5 days ago was: ' + d.toLocaleString());
new Date(new Date().setDate(new Date().getDate()-5))
- ce sera il y a 5 jours. Dans l'exemple de la réponse, passez-le à une nouvelle date pour obtenir un objet date. C'est new Date(d)
ce que tu veux.
setDate(-1)
fixera la date au dernier jour du mois
toString
méthodes telles que toISOString
, toDateString
, etc.
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Si vous effectuez de nombreuses manipulations de dates complexes dans votre application Web, DateJS vous facilitera la vie:
getTime()
et setTime()
sont millisecondes depuis l'époque. Peu importe que le temps traverse une limite annuelle.
Ca fait plutot comme ca:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
function getDaysAgo(b){var a=new Date;a.setDate(a.getDate()-b);return a};
alors justevar daysAgo45 = getDaysAgo(45);
J'ai remarqué que les getDays + X ne fonctionnent pas au-delà des frontières jour / mois. L'utilisation de getTime fonctionne tant que votre date n'est pas antérieure à 1970.
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
obtenir moment.js. Tous les enfants cool l'utilisent. Il a plus d'options de formatage, etc. Où
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
Optionnel! Convertir en obj JS Date pour reliure angulaire.
var date = new Date(dateMnsFive.toISOString());
Optionnel! Format
var date = dateMnsFive.format("YYYY-MM-DD");
J'ai fait ce prototype pour Date afin que je puisse passer des valeurs négatives pour soustraire des jours et des valeurs positives pour ajouter des jours.
if(!Date.prototype.adjustDate){
Date.prototype.adjustDate = function(days){
var date;
days = days || 0;
if(days === 0){
date = new Date( this.getTime() );
} else if(days > 0) {
date = new Date( this.getTime() );
date.setDate(date.getDate() + days);
} else {
date = new Date(
this.getFullYear(),
this.getMonth(),
this.getDate() - Math.abs(days),
this.getHours(),
this.getMinutes(),
this.getSeconds(),
this.getMilliseconds()
);
}
this.setTime(date.getTime());
return this;
};
}
Donc, pour l'utiliser, je peux simplement écrire:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
d.setDate(d.getDate() + days)
des valeurs positives et négatives pour les jours pour ajouter et soustraire des jours respectivement. Et cela devrait fonctionner sur l'instance (comme le font les autres méthodes Date), pas créer et renvoyer une copie.
Quelques-unes des solutions existantes étaient proches, mais pas exactement ce que je voulais. Cette fonction fonctionne avec des valeurs positives ou négatives et gère les cas limites.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
J'aime faire le calcul en millisecondes. Alors utilisezDate.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
et si vous l'aimez formaté
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
REMARQUE: Date.now()
ne fonctionne pas dans les anciens navigateurs (par exemple IE8 je pense). Polyfill ici .
@socketpair a souligné ma négligence. Comme il le dit, "un jour de l'année compte 23 heures et 25 en raison des règles de fuseau horaire".
Pour développer cela, la réponse ci-dessus aura des inexactitudes d'heure d'été dans le cas où vous souhaitez calculer le jour LOCAL il y a 5 jours dans un fuseau horaire avec des changements d'heure d'été et vous
Date.now()
l'heure locale actuelle est indiquée, ou.toString()
qui renvoie la date locale et est donc incompatible avec la Date.now()
date de base en UTC. Cependant, cela fonctionne si vous faites vos calculs en UTC, par exemple
A. Vous voulez la date UTC il y a 5 jours de MAINTENANT (UTC)
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B. Vous commencez avec une date de base UTC autre que "maintenant", en utilisant Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
Je trouve un problème avec la méthode getDate () / setDate (), car elle transforme trop facilement tout en millisecondes, et la syntaxe est parfois difficile à suivre pour moi.
Au lieu de cela, j'aime travailler sur le fait que 1 jour = 86 400 000 millisecondes.
Donc, pour votre question particulière:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Fonctionne comme un charme.
J'utilise cette méthode tout le temps pour faire des calculs glissants de 30/60/365 jours.
Vous pouvez facilement extrapoler cela pour créer des unités de temps pour des mois, des années, etc.
divisez votre date en parties, puis renvoyez une nouvelle date avec les valeurs ajustées
function DateAdd(date, type, amount){
var y = date.getFullYear(),
m = date.getMonth(),
d = date.getDate();
if(type === 'y'){
y += amount;
};
if(type === 'm'){
m += amount;
};
if(type === 'd'){
d += amount;
};
return new Date(y, m, d);
}
N'oubliez pas que les mois sont basés sur zéro, mais pas les jours. c'est-à-dire nouvelle date (2009, 1, 1) == 01 février 2009, nouvelle date (2009, 1, 0) == 31 janvier 2009;
Sans utiliser la deuxième variable, vous pouvez remplacer 7 pour votre dos x jours:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
function addDays (date, daysToAdd) {
var _24HoursInMilliseconds = 86400000;
return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds);
};
var now = new Date();
var yesterday = addDays(now, - 1);
var tomorrow = addDays(now, 1);
J'ai créé une fonction de manipulation de date. vous pouvez ajouter ou soustraire n'importe quel nombre de jours, heures, minutes.
function dateManipulation(date, days, hrs, mins, operator) {
date = new Date(date);
if (operator == "-") {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() - durationInMs);
} else {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() + durationInMs);
}
return newDate;
}
Maintenant, appelez cette fonction en passant des paramètres. Par exemple, voici un appel de fonction pour obtenir la date avant 3 jours à compter d'aujourd'hui.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
Utilisez MomentJS .
function getXDaysBeforeDate(referenceDate, x) {
return moment(referenceDate).subtract(x , 'day').format('MMMM Do YYYY, h:mm:ss a');
}
var yourDate = new Date(); // let's say today
var valueOfX = 7; // let's say 7 days before
console.log(getXDaysBeforeDate(yourDate, valueOfX));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
Les meilleures réponses ont conduit à un bug dans mon code où, le premier du mois, il fixait une date future dans le mois en cours. Voici ce que j'ai fait,
curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
Un moyen simple de gérer les dates est d'utiliser Moment.js
Vous pouvez utiliser add
. Exemple
var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days'); //Add 5 days to start date
alert(new_date);
pour moi, toutes les combinaisons ont bien fonctionné avec l'extrait de code ci-dessous, l'extrait de code est pour la mise en œuvre Angular-2, si vous devez ajouter des jours, passer un nombre positif de jours, si vous devez soustraire passer un nombre négatif de jours
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
J'ai un bon kilométrage obsolète.
d = new Date();
d.add(-10).days(); // subtract 10 days
Agréable!
Le site Web comprend cette beauté:
Datejs ne se contente pas d'analyser les chaînes, il les tranche proprement en deux
Si vous souhaitez à la fois soustraire un nombre de jours et formater votre date dans un format lisible par l'homme, vous devriez envisager de créer un DateHelper
objet personnalisé qui ressemble à ceci:
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));
(voir aussi ce violon )
Voir le code suivant, soustrayez les jours de la date actuelle. Définissez également le mois en fonction de la date soustraite.
var today = new Date();
var substract_no_of_days = 25;
today.setTime(today.getTime() - substract_no_of_days* 24 * 60 * 60 * 1000);
var substracted_date = (today.getMonth()+1) + "/" +today.getDate() + "/" + today.getFullYear();
alert(substracted_date);
Lors de la définition de la date, la date est convertie en millisecondes, vous devez donc la reconvertir en date:
Cette méthode prend également en compte le changement de nouvel an, etc.
function addDays( date, days ) {
var dateInMs = date.setDate(date.getDate() - days);
return new Date(dateInMs);
}
var date_from = new Date();
var date_to = addDays( new Date(), parseInt(days) );
Vous pouvez utiliser Javascript.
var CurrDate = new Date(); // Current Date
var numberOfDays = 5;
var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays);
alert(days); // It will print 5 days before today
Pour PHP,
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
J'espère que cela vous aidera.
J'ai converti en millisecondes et les jours déduits sinon le mois et l'année ne changeront pas et logique
var numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10), // Year
parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();
L'espoir aide
var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;
var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );
Utilisation de la syntaxe de la fonction JavaScript moderne
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
Essayez quelque chose comme ça
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate peut être n'importe quelle date
la limite pourrait être la différence de nombre de jours (positive pour l'avenir et négative pour le passé)
Cela vous donnera un résultat des 10 derniers jours à 110% de travail, vous n'obtiendrez aucun type de problème
var date = new Date();
var day=date.getDate();
var month=date.getMonth() + 1;
var year=date.getFullYear();
var startDate=day+"/"+month+"/"+year;
var dayBeforeNineDays=moment().subtract(10, 'days').format('DD/MM/YYYY');
startDate=dayBeforeNineDays;
var endDate=day+"/"+month+"/"+year;
vous pouvez modifier les jours de soustraction selon vos besoins
var daysToSubtract = 3;
$.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ;
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());