Kennt jemand eine einfache Möglichkeit, ein Date zu nehmen (z. B. Heute) und X Tage zurück zu gehen?
Zum Beispiel, wenn ich das Datum 5 Tage vor dem heutigen Tag berechnen möchte.
Kennt jemand eine einfache Möglichkeit, ein Date zu nehmen (z. B. Heute) und X Tage zurück zu gehen?
Zum Beispiel, wenn ich das Datum 5 Tage vor dem heutigen Tag berechnen möchte.
Antworten:
Versuchen Sie so etwas:
var d = new Date();
d.setDate(d.getDate()-5);
Beachten Sie, dass dies das Datumsobjekt ändert und den Zeitwert des aktualisierten Datums zurückgibt.
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))
- Das wird vor 5 Tagen sein. Übergeben Sie im Beispiel der Antwort ein neues Datum, um ein Datumsobjekt zu erhalten. Also new Date(d)
ist was du willst.
setDate(-1)
wird das Datum auf den letzten Tag des Monats setzen
toString
Methoden wie toISOString
, toDateString
etc.
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Wenn Sie in Ihrer Webanwendung viele Manipulationen an Kopfschmerzen durchführen , erleichtert DateJS Ihnen das Leben erheblich:
getTime()
und setTime()
sind Millisekunden seit der Epoche. Es sollte keine Rolle spielen, ob die Zeit eine Jahresgrenze überschreitet.
Es geht ungefähr so:
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};
dann nurvar daysAgo45 = getDaysAgo(45);
Ich habe festgestellt, dass getDays + X nicht über Tages- / Monatsgrenzen hinweg funktioniert. Die Verwendung von getTime funktioniert, solange Ihr Datum nicht vor 1970 liegt.
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
Holen Sie sich moment.js. Alle coolen Kids benutzen es. Es hat mehr Formatierungsoptionen usw. Wo
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
Optional! Konvertieren Sie in JS Date obj für die Winkelbindung.
var date = new Date(dateMnsFive.toISOString());
Optional! Format
var date = dateMnsFive.format("YYYY-MM-DD");
Ich habe diesen Prototyp für Datum erstellt, damit ich negative Werte zum Subtrahieren von Tagen und positive Werte zum Hinzufügen von Tagen übergeben kann.
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;
};
}
Um es zu benutzen, kann ich einfach schreiben:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
d.setDate(d.getDate() + days)
sowohl positive als auch negative Werte für Tage verwenden , um Tage zu addieren bzw. zu subtrahieren. Und es sollte auf der Instanz funktionieren (wie andere Date-Methoden), keine Kopie erstellen und zurückgeben.
Einige der vorhandenen Lösungen waren nah beieinander, aber nicht ganz genau das, was ich wollte. Diese Funktion arbeitet sowohl mit positiven als auch mit negativen Werten und behandelt Grenzfälle.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Ich rechne gerne in Millisekunden. Also benutzeDate.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
und wenn Sie es formatiert mögen
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
HINWEIS: Funktioniert Date.now()
nicht in älteren Browsern (zB IE8, glaube ich). Polyfill hier .
@socketpair wies auf meine Schlamperei hin. Wie er / sie sagt "Einige Tage im Jahr haben 23 Stunden und einige 25 aufgrund von Zeitzonenregeln".
Um dies zu erweitern, weist die obige Antwort Ungenauigkeiten bei der Sommerzeit auf, wenn Sie den LOKALEN Tag vor 5 Tagen in einer Zeitzone mit Änderungen bei der Sommerzeit berechnen möchten
Date.now()
Sie jetzt die aktuelle LOKALE Zeit haben, oder.toString()
die das lokale Datum zurückgibt und daher nicht mit dem Date.now()
Basisdatum in UTC kompatibel ist . Es funktioniert jedoch, wenn Sie alle Berechnungen in UTC durchführen, z
A. Sie möchten das UTC-Datum vor 5 Tagen von JETZT (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. Sie beginnen mit einem anderen UTC-Basisdatum als "jetzt" Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
Ich finde ein Problem mit der Methode getDate () / setDate () darin, dass sie zu leicht alles in Millisekunden umwandelt und die Syntax manchmal für mich schwer zu befolgen ist.
Stattdessen möchte ich die Tatsache abarbeiten, dass 1 Tag = 86.400.000 Millisekunden.
Also, für Ihre spezielle Frage:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Klappt wunderbar.
Ich benutze diese Methode die ganze Zeit, um rollierende 30/60/365-Tage-Berechnungen durchzuführen.
Sie können dies leicht extrapolieren, um Zeiteinheiten für Monate, Jahre usw. zu erstellen.
Teilen Sie Ihr Datum in Teile auf und geben Sie dann ein neues Datum mit den angepassten Werten zurück
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);
}
Denken Sie daran, dass die Monate auf Null basieren, die Tage jedoch nicht. dh neues Datum (2009, 1, 1) == 01. Februar 2009, neues Datum (2009, 1, 0) == 31. Januar 2009;
Ohne die zweite Variable zu verwenden, können Sie 7 durch Ihre Rücken x Tage ersetzen:
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);
Ich habe eine Funktion zur Datumsmanipulation erstellt. Sie können beliebig viele Tage, Stunden, Minuten addieren oder subtrahieren.
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;
}
Rufen Sie diese Funktion nun auf, indem Sie Parameter übergeben. Hier ist beispielsweise ein Funktionsaufruf zum Abrufen des Datums vor 3 Tagen ab heute.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
Verwenden Sie 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>
Die häufigsten Antworten führten zu einem Fehler in meinem Code, bei dem am ersten des Monats ein zukünftiges Datum für den aktuellen Monat festgelegt wurde. Folgendes habe ich getan:
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
Eine einfache Möglichkeit, Daten zu verwalten, ist die Verwendung Moment.js
Sie können verwenden add
. Beispiel
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);
Für mich haben alle Kombinationen mit dem folgenden Code-Snipplet gut funktioniert. Das Snippet ist für die Angular-2-Implementierung vorgesehen. Wenn Sie Tage hinzufügen müssen, übergeben Sie eine positive Anzahl von Tagen, wenn Sie die negative Anzahl von Tagen subtrahieren müssen
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
Ich habe eine gute Laufleistung veraltet. Js:
d = new Date();
d.add(-10).days(); // subtract 10 days
Nett!
Website enthält diese Schönheit:
Datejs analysiert nicht nur Strings, sondern schneidet sie sauber in zwei Teile
Wenn Sie sowohl eine Anzahl von Tagen subtrahieren als auch Ihr 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 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));
(siehe auch diese Geige )
Siehe folgenden Code, subtrahieren Sie die Tage vom aktuellen Datum. Stellen Sie den Monat außerdem nach dem subtrahierten Datum ein.
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);
Wenn Sie das Datum einstellen, wird das Datum in Millisekunden konvertiert. Sie müssen es also wieder in ein Datum konvertieren:
Diese Methode berücksichtigt auch Neujahrswechsel 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) );
Sie können Javascript verwenden.
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
Für PHP
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
Hoffe es wird dir helfen.
Ich habe in Millisekunden umgerechnet und Tage abgezogen, sonst ändern sich Monat und Jahr nicht und sind logisch
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();
Hoffnung hilft
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 );
Verwenden der modernen JavaScript-Funktionssyntax
const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));
console.log(getDaysPastDate(1)); // yesterday
Versuchen Sie so etwas
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate kann ein beliebiges Datum sein
Das Limit kann die Differenz in der Anzahl der Tage sein (positiv für die Zukunft und negativ für die Vergangenheit).
Dies gibt Ihnen die letzten 10 Tage Ergebnis 110% Arbeit Sie werden keine Art von Problem bekommen
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;
Sie können die Subtraktionstage entsprechend Ihren Anforderungen ändern
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());