Kennt jemand eine einfache Möglichkeit, ein Datum (z. B. Heute) zu nehmen und X Tage zurück zu gehen?
Wenn ich zum Beispiel das Datum 5 Tage vor dem heutigen Tag berechnen möchte.
Versuchen Sie etwas so:
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());
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Wenn Sie während Ihrer gesamten Webanwendung viele Daten zum Manipulieren von Kopfschmerzen verwenden, wird DateJS Ihnen das Leben erleichtern:
Es geht ungefähr so:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
Ich habe festgestellt, dass der getDays + X nicht über Tag/Monat-Grenzen 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 Kinder benutzen es. Es hat mehr Formatierungsoptionen usw. Wo
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
Wahlweise! Konvertieren Sie in JS Date obj für Winkelbindung.
var date = new Date(dateMnsFive.toISOString());
Wahlweise! Format
var date = dateMnsFive.format("YYYY-MM-DD");
Ich habe diesen Prototyp für Date erstellt, so dass ich negative Werte übergeben konnte, um Tage zu entfernen, und positive Werte, um Tage hinzuzufügen.
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);
Ich mag Mathematik in Millisekunden. Verwenden Sie also Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
und wenn es Ihnen gefällt, formatiert
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
HINWEIS: Date.now()
funktioniert nicht in älteren Browsern (zB IE8, denke ich). Polyfill hier .
@socketpair wies auf meine Schlamperei hin. Wie er/sie sagt "Einige Tage im Jahr haben 23 Stunden und 25 aufgrund von Zeitzonenregeln".
Um dies zu erweitern, wird die Antwort oben zu Ungenauigkeiten bei der Tageslichteinsparung führen, wenn Sie den LOCAL-Tag vor 5 Tagen in einer Zeitzone mit Änderungen an der Tageslichteinsparung berechnen möchten
Date.now()
dir jetzt das aktuelle LOCAL gibt, oder .toString()
, das das lokale Datum zurückgibt und daher mit dem Basisdatum Date.now()
in UTC nicht kompatibel ist. Es funktioniert jedoch, wenn Sie Ihre 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" und verwenden Date.UTC()
.
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
teilen Sie Ihr Datum in Teile auf und geben Sie 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 null sind, die Tage jedoch nicht. dh neues Datum (2009, 1, 1) == 1. Februar 2009, neues Datum (2009, 1, 0) == 31. Januar 2009;
Ein paar der bestehenden Lösungen waren nahe, aber nicht genau das, was ich wollte. Diese Funktion arbeitet sowohl mit positiven als auch 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()
);
}
Ein Problem mit der getDate ()/setDate () -Methode ist, dass sie zu leicht alles in Millisekunden umwandelt und die Syntax manchmal schwer zu folgen ist.
Stattdessen arbeite ich gerne daran, dass 1 Tag = 86.400.000 Millisekunden ist.
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 verwende diese Methode ständig für die Berechnung von 30/60/365 Tagen.
Sie können dies einfach extrapolieren, um Zeiteinheiten für Monate, Jahre usw. zu erstellen.
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);
Ohne die zweite Variable zu verwenden, können Sie 7 für durch x Tage x ersetzen:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
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>
für mich funktionierten alle Kombinationen gut mit dem folgenden Code-Snipplet, Das Snippet ist für die Angular-2-Implementierung. Wenn Sie Tage hinzufügen müssen, übergeben Sie die positive Anzahl der Tage, wenn Sie die negative Anzahl der Tage 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 Funktion zur Datumsmanipulation erstellt. Sie können eine beliebige Anzahl von Tagen, Stunden, Minuten hinzufügen oder abziehen.
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 nun diese Funktion auf, indem Sie Parameter übergeben. Hier ist zum Beispiel ein Funktionsaufruf, um das Datum vor 3 Tagen ab heute abzurufen.
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
Die einfache Verwaltung von Datumsangaben ist die Verwendung von Moment.js
Sie können add
verwenden. 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);
Die ersten Antworten führten zu einem Fehler in meinem Code, bei dem am ersten des Monats ein zukünftiges Datum im aktuellen Monat festgelegt wurde. Hier ist was ich getan habe,
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
Sehen Sie den folgenden Code, subtrahieren Sie die Tage vom aktuellen Datum. Stellen Sie den Monat auch entsprechend dem abgezogenen 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 eine Anzahl von Tagen subtrahieren und Ihr Datum in einem für Menschen lesbaren Format formatieren möchten, sollten Sie ein benutzerdefiniertes DateHelper
-Objekt erstellen, das ungefähr wie folgt 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 this Fiddle )
Ich bekomme gute Laufleistung außerhalb von date.js:
d = new Date();
d.add(-10).days(); // subtract 10 days
Nett!
Website beinhaltet diese Schönheit:
Datejs analysiert nicht nur Strings, sondern schneidet sie sauber in zwei Teile
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;
Ich hoffe es wird dir helfen.
Mit dem Momentjs können Sie sehen, wie Sie das Datum 5 Tage vor dem heutigen Datum finden können.
moment(Date.now() - 5 * 24 * 3600 * 1000).format('YYYY-MM-DD') // 2019-01-03
Versuchen Sie so etwas
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate kann ein beliebiges Datum sein
limit könnte der Unterschied in der Anzahl der Tage sein (positiv für die Zukunft und negativ für die Vergangenheit)
Ich mag das Folgende, weil es eine Zeile ist. Nicht perfekt für DST-Änderungen, aber normalerweise gut genug für meine Bedürfnisse.
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 );
Beim Einstellen des Datums wird das Datum in Millisekunden konvertiert. Sie müssen es also in ein Datum zurückwandeln:
Diese Methode berücksichtigt auch die Neujahrsänderung usw.
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) );
Verwendung der modernen JavaScript-Funktionssyntax
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());
Ich spielte herum und fand eine einfache Lösung:
Benutze .setDate(+daysCount|-daysCount)
; Das Symbol =|-
ist ein Muss.
let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);
today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
Ich habe in Millisekunden umgewandelt und Tage abgezogen, ansonsten ä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 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 );
Dies gibt Ihnen die letzten 10 Tage Ergebnis 110% arbeiten, erhalten Sie keine Art von Problem
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 gemäß Ihren Anforderungen ändern