Antworten:
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)
Nicht sehr effizient, aber als Oneliner:
var yesterday = new Date(new Date().setDate(new Date().getDate()-1));
Das Obige schafft drei Date
Objekte, was unnötig verschwenderisch ist. Dies kann auf eine einzige Instanziierung reduziert werden mit:
var yesterday = (function(){this.setDate(this.getDate()-1); return this})
.call(new Date)
Oder wenn Sie es vorziehen:
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Oder wenn Sie ES6 mit Pfeilfunktion bevorzugen:
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)
Versuche dies
var d = new Date();
d.setDate(d.getDate() - 1);
Überraschenderweise gibt es keinen Antwortpunkt auf die einfachste Cross-Browser-Lösung
Um genau die gleiche Zeit gestern zu finden:
var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000
Das ist, wenn Sie abhängigkeitsfrei gehen möchten, sonst würde ich empfehlen, http://momentjs.com zu verwenden
Um die Frage zu verallgemeinern und andere Diff-Berechnungen durchzuführen, verwenden Sie:
var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);
Dadurch wird ein neues Datumsobjekt erstellt, das auf dem Wert "now" als Ganzzahl basiert und die Unix-Epoche in Millisekunden darstellt, wobei ein Tag abgezogen wird.
Vor zwei Tagen:
var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);
Vor einer Stunde:
var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);
new Date(Date.parse(new Date()) - 86400000)
. Obwohl ich Date.now () mag, versuche ich es vielleicht stattdessen. Es wird ein zusätzliches Datum gespeichert.
Ich benutze Moment Library, es ist sehr flexibel und einfach zu bedienen.
In deinem Fall:
let yesterday = moment().subtract(1, 'day').toDate();
subtract
anstelle vonadd
//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);
Dies wird gestern um 00:00 Uhr mit Minutengenauigkeit produziert
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);
wird den Trick machen
d.setHours(-1,0,0,0)
. Dies wird das gestrige Datum zurückgeben, aber es ist möglicherweise nicht die gewünschte Zeit (23:00:00)
Probieren Sie es aus, funktioniert für mich:
var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `
Dies brachte mir ein Datumsobjekt für gestern zurück
var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)
So können Sie sowohl heute als auch gestern verwenden
Hier ist ein Einzeiler, der verwendet wird, um das gestrige Datum im Format JJJJ-MM-TT im Text abzurufen und den Zeitzonenversatz zu verarbeiten.
new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]
Es kann offensichtlich auf das Rückgabedatum geändert werden, x Tage zurück in der Zeit. Zeit usw. einbeziehen.
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
Wenn Sie sowohl das Datum für gestern abrufen als auch dieses Datum in einem für Menschen lesbaren Format formatieren möchten, sollten Sie ein benutzerdefiniertes DateHelper
Objekt erstellen , das ungefähr so aussieht:
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));
(siehe auch diese Geige )
Sie können momentjs verwenden. Es ist sehr hilfreich, mit dieser Bibliothek viele Dinge zu erreichen.
Holen Sie sich das gestrige Datum mit dem aktuellen Timing
moment().subtract(1, 'days').toString()
Holen Sie sich das Datum von gestern mit einem Beginn des Datums
moment().subtract(1, 'days').startOf('day').toString()
"Date.now () - 86400000" funktioniert am Endtag der Sommerzeit (der an diesem Tag 25 Stunden hat) nicht.
Eine weitere Option ist die Verwendung von Closure:
var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
getDate
der Tag des Monats zurückgegeben wird (z. B. 1 - 31),setDate(0)
das Datum jedoch tatsächlich auf den letzten Tag des Vormonats gesetzt wird. Funktioniert dies jedoch in allen Browsern?