Réponses:
var date = new Date();
date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)
date.setDate(date.getDate() - 1);
date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)
Pas très efficace, mais comme oneliner:
var yesterday = new Date(new Date().setDate(new Date().getDate()-1));
Ce qui précède crée trois Date
objets qui sont inutilement inutiles. Cela peut être réduit à une seule instanciation avec:
var yesterday = (function(){this.setDate(this.getDate()-1); return this})
.call(new Date)
Ou, si vous préférez:
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Ou, si vous préférez ES6 avec fonction flèche:
let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Essaye ça
var d = new Date();
d.setDate(d.getDate() - 1);
Étonnamment, aucun point de réponse à la solution de navigateur croisé la plus simple
Pour trouver exactement la même heure hier:
var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000
C'est si vous voulez aller sans dépendance, sinon je recommanderais d'utiliser http://momentjs.com
Pour généraliser la question et effectuer d'autres calculs de diff, utilisez:
var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);
cela crée un nouvel objet de date basé sur la valeur de "maintenant" comme un entier qui représente l'époque unix en millisecondes soustrayant un jour.
Il y a deux jours:
var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);
Il y a une heure:
var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);
new Date(Date.parse(new Date()) - 86400000)
. Bien que j'aime Date.now (), je vais peut-être essayer à la place. Cela fera gagner une date supplémentaire.
J'utilise la bibliothèque moment , elle est très flexible et facile à utiliser.
Dans ton cas:
let yesterday = moment().subtract(1, 'day').toDate();
subtract
au lieu deadd
new Date(new Date().setDate(new Date().getDate()-1))
//Create a date object using the current time
var now = new Date();
//Subtract one day from it
now.setDate(now.getDate()-1);
var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);
Cela produira hier à 00h00 avec une précision de minutes
var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);
d.setHours(0,0,0,0);
fera l'affaire
d.setHours(-1,0,0,0)
. Cela retournera la date d'hier, mais ce n'est peut-être pas l'heure que vous voulez (23:00:00)
Essayez ceci, fonctionne pour moi:
var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `
Cela m'a fait récupérer un objet date pour hier
var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)
afin que vous puissiez utiliser à la fois aujourd'hui et hier
Voici une ligne qui est utilisée pour obtenir la date d'hier au format AAAA-MM-JJ dans le texte et gérer le décalage du fuseau horaire.
new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]
Il peut évidemment être changé en date de retour, x jours en arrière. Pour inclure le temps, etc.
console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"
// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000 // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000
Si vous souhaitez à la fois obtenir la date d'hier et formater cette date dans un format lisible par l'homme, envisagez 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 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));
(voir aussi ce violon )
Vous pouvez utiliser momentjs, il est très utile de réaliser beaucoup de choses avec cette bibliothèque.
Obtenez la date d'hier avec le calendrier actuel
moment().subtract(1, 'days').toString()
Obtenez la date d'hier avec un début de date
moment().subtract(1, 'days').startOf('day').toString()
"Date.now () - 86400000" ne fonctionnera pas le jour de fin de l'heure d'été (qui compte 25 heures ce jour-là)
Une autre option consiste à utiliser la fermeture:
var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
getDate
retourne le jour du mois (par exemple: 1 - 31) maissetDate(0)
définit en fait la date au dernier jour du mois précédent. Est-ce que cela fonctionne sur tous les navigateurs?