Est-ce que quelqu'un connaît un moyen facile de prendre une date (par exemple, aujourd'hui) et de revenir en arrière X jours?
Donc, par exemple, si je veux calculer la date 5 jours avant aujourd'hui.
Essayez quelque chose comme ça:
var d = new Date();
d.setDate(d.getDate()-5);
Notez que cela modifie l'objet de 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());
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 date dans votre application Web, DateJS vous simplifiera la vie:
Ca fait plutot comme ca:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
J'ai remarqué que les getDays + X ne fonctionnent pas au-delà des limites jour/mois. Utiliser 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 cools 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 JS Date obj pour la liaison angulaire.
var date = new Date(dateMnsFive.toISOString());
Optionnel! Format
var date = dateMnsFive.format("YYYY-MM-DD");
J'ai créé ce prototype pour Date afin de pouvoir 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);
J'aime faire le calcul en millisecondes. Alors utilisez Date.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é mon manque à gagner. Comme il le dit, "Chaque jour de l'année, vous disposez de 23 heures et de 25 heures à cause des règles de fuseau horaire".
Pour répondre à cette question, la réponse ci-dessus comportera des inexactitudes en matière d'économie de jour si vous souhaitez calculer le jour LOCAL il y a 5 jours dans un fuseau horaire avec les modifications de l'éclairage diurne
Date.now()
vous donne l'heure locale actuelle, ou .toString()
qui renvoie la date locale et est donc incompatible avec la date de base Date.now()
au format UTC. Cependant, cela fonctionne si vous faites vos calculs tout en UTC, par exemple
A. Vous voulez la date UTC il y a 5 jours à partir de NOW (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
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);
}
Rappelez-vous que les mois sont à base zéro, mais les jours ne le sont pas. c'est-à-dire nouvelle date (2009, 1, 1) == 01 février 2009, nouvelle date (2009, 1, 0) == 31 janvier 2009;
Quelques 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()
);
}
La méthode getDate ()/setDate () me pose un problème: elle transforme trop facilement tout en millisecondes et la syntaxe est parfois difficile à suivre pour moi.
Au lieu de cela, j'aime bien travailler sur le fait qu'un 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 roulants sur 30/60/365 jours.
Vous pouvez facilement extrapoler cela pour créer des unités de temps pour des mois, des années, etc.
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);
Sans utiliser la seconde variable, vous pouvez remplacer 7 par votre dos x jours:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
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>
pour moi, toutes les combinaisons ont bien fonctionné avec l'extrait de code ci-dessous, l'extrait est destiné à la mise en œuvre Angular-2, si vous devez ajouter des jours, transmettez un nombre positif de jours, si vous devez soustraire, transmettez 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 créé une fonction pour la manipulation de la date. vous pouvez ajouter ou soustraire un nombre quelconque de jours, heures et 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;
}
Appelez maintenant cette fonction en passant des paramètres. Par exemple, voici un appel de fonction pour obtenir une date avant 3 jours à compter de ce jour.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
Un moyen facile 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);
Les réponses les plus fréquentes ont entraîné un bogue dans mon code qui, le premier du mois, définissait une date ultérieure pour 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
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);
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 objet DateHelper
personnalisé ressemblant à 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 this Fiddle )
Je reçois un bon kilométrage hors de date.js:
d = new Date();
d.add(-10).days(); // subtract 10 days
Agréable!
Le site comprend cette beauté:
Datejs ne se contente pas d’analyser les chaînes, il les découpe proprement en deux
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.
Voyez comment vous pouvez trouver la date de 5 jours avant aujourd'hui en utilisant les momentsjs.
moment(Date.now() - 5 * 24 * 3600 * 1000).format('YYYY-MM-DD') // 2019-01-03
Essayez quelque chose comme ça
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate pourrait être n'importe quelle date
limite pourrait être la différence de nombre de jours (positive pour l'avenir et négative pour le passé)
J'aime ce qui suit parce que c'est une ligne. Pas parfait avec les changements DST mais généralement assez bon pour mes besoins.
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
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 );
Lorsque vous définissez la date, celle-ci est convertie en millisecondes. Vous devez donc la reconvertir en date:
Cette méthode prend également en compte, changement de nouvelle année, 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) );
Utilisation de la syntaxe de fonction JavaScript moderne
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());
Je jouais et j'ai trouvé une solution simple:
Utilisez .setDate(+daysCount|-daysCount)
; le symbole =|-
est un must;
let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);
today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
J'ai converti en millisecondes et 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 today = new Date();
var tmpDate = new Date();
var i = -3; var dateArray = [];
while( i < 4 ){
tmpDate = tmpDate.setDate(today.getDate() + i);
tmpDate = new Date( tmpDate );
var dateString = ( '0' + ( tmpDate.getMonth() + 1 ) ).slice(-2) + '-' + ( '0' + tmpDate.getDate()).slice(-2) + '-' + tmpDate.getFullYear();
dateArray.Push( dateString );
i++;
}
console.log( dateArray );
Cela vous donnera le résultat des 10 derniers jours à 110%, vous ne recevrez aucun 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 changer les jours de soustraction en fonction de vos besoins