Wie man mit JavaScript Tage zur aktuellen Date
hinzufügt. Hat JavaScript eine eingebaute Funktion wie AddDay
von .Net?
Sie können eins erstellen mit: -
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
Dadurch wird ggf. automatisch der Monat erhöht. Zum Beispiel:
8/31 + 1 Tag wird 9/1.
Das Problem bei der direkten Verwendung von setDate
ist, dass es sich um einen Mutator handelt und solche Dinge am besten vermieden werden. ECMA hielt es für angebracht, Date
als veränderliche Klasse und nicht als unveränderliche Struktur zu behandeln.
Korrekte Antwort:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Falsche Antwort:
Diese Antwort manchmal liefert das korrekte Ergebnis, liefert aber häufig das falsche Jahr und den falschen Monat. Diese Antwort funktioniert nur dann, wenn das Datum, an dem Sie Tage hinzufügen, zufällig das aktuelle Jahr und den aktuellen Monat aufweist.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Beweis/Beispiel
// Correct
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
// Bad Year/Month
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
// Bad during DST
function addDaysDstFail(date, days) {
var dayms = (days * 24 * 60 * 60 * 1000);
return new Date(date.getTime() + dayms);
}
// TEST
function formatDate(date) {
return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
}
$('tbody tr td:first-child').each(function () {
var $in = $(this);
var $out = $('<td/>').insertAfter($in).addClass("answer");
var $outFail = $('<td/>').insertAfter($out);
var $outDstFail = $('<td/>').insertAfter($outFail);
var date = new Date($in.text());
var correctDate = formatDate(addDays(date, 1));
var failDate = formatDate(addDaysWRONG(date, 1));
var failDstDate = formatDate(addDaysDstFail(date, 1));
$out.text(correctDate);
$outFail.text(failDate);
$outDstFail.text(failDstDate);
$outFail.addClass(correctDate == failDate ? "right" : "wrong");
$outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong");
});
body {
font-size: 14px;
}
table {
border-collapse:collapse;
}
table, td, th {
border:1px solid black;
}
td {
padding: 2px;
}
.wrong {
color: red;
}
.right {
color: green;
}
.answer {
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<th colspan="4">DST Dates</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>03/10/2013</td></tr>
<tr><td>11/03/2013</td></tr>
<tr><td>03/09/2014</td></tr>
<tr><td>11/02/2014</td></tr>
<tr><td>03/08/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr>
<th colspan="4">2013</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2013</td></tr>
<tr><td>02/01/2013</td></tr>
<tr><td>03/01/2013</td></tr>
<tr><td>04/01/2013</td></tr>
<tr><td>05/01/2013</td></tr>
<tr><td>06/01/2013</td></tr>
<tr><td>07/01/2013</td></tr>
<tr><td>08/01/2013</td></tr>
<tr><td>09/01/2013</td></tr>
<tr><td>10/01/2013</td></tr>
<tr><td>11/01/2013</td></tr>
<tr><td>12/01/2013</td></tr>
<tr>
<th colspan="4">2014</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2014</td></tr>
<tr><td>02/01/2014</td></tr>
<tr><td>03/01/2014</td></tr>
<tr><td>04/01/2014</td></tr>
<tr><td>05/01/2014</td></tr>
<tr><td>06/01/2014</td></tr>
<tr><td>07/01/2014</td></tr>
<tr><td>08/01/2014</td></tr>
<tr><td>09/01/2014</td></tr>
<tr><td>10/01/2014</td></tr>
<tr><td>11/01/2014</td></tr>
<tr><td>12/01/2014</td></tr>
<tr>
<th colspan="4">2015</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2015</td></tr>
<tr><td>02/01/2015</td></tr>
<tr><td>03/01/2015</td></tr>
<tr><td>04/01/2015</td></tr>
<tr><td>05/01/2015</td></tr>
<tr><td>06/01/2015</td></tr>
<tr><td>07/01/2015</td></tr>
<tr><td>08/01/2015</td></tr>
<tr><td>09/01/2015</td></tr>
<tr><td>10/01/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr><td>12/01/2015</td></tr>
</tbody>
</table>
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Seien Sie vorsichtig, denn das kann schwierig sein. Wenn Sie "Morgen" einstellen, funktioniert es nur, weil der aktuelle Wert für "Heute" mit Jahr und Monat übereinstimmt. Die Einstellung auf eine Datumsnummer wie "32" funktioniert normalerweise trotzdem gut, um den nächsten Monat zu erreichen.
Meine einfache Lösung ist:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
diese Lösung hat kein Problem mit der Sommerzeit. Außerdem kann man jeden Offset für Jahre, Monate, Tage usw. hinzufügen/subversieren.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
ist korrekter Code.
Diese Antworten erscheinen mir verwirrend, ich bevorzuge:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () gibt uns seit 1970 Millisekunden, und 86400000 ist die Anzahl der Millisekunden pro Tag. Daher enthält ms Millisekunden für das gewünschte Datum.
Die Verwendung des Millisekunden-Konstruktors ergibt das gewünschte Datumsobjekt.
Versuchen
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Verwenden Sie setDate (), um ein Datum hinzuzufügen, das Ihr Problem nicht lösen wird. Versuchen Sie, einige Tage zu einem Februar-Monat hinzuzufügen. Wenn Sie versuchen, neue Tage hinzuzufügen, führt dies nicht zu dem, was Sie erwartet haben.
Ich habe lange damit verbracht, herauszufinden, was der Deal mit dem Jahr war, und fügte nicht hinzu, wenn man die Leitbeispiele unten befolgte.
Wenn Sie einfach n Tage zu dem Datum hinzufügen möchten, das Sie haben, gehen Sie am besten:
myDate.setDate (myDate.getDate () + n);
oder die Langwind-Version
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Das heute/morgen-Zeug ist verwirrend. Wenn Sie das aktuelle Datum in Ihre neue Datumsvariable setzen, wird der Jahreswert durcheinander gebracht. Wenn Sie nach dem ursprünglichen Datum arbeiten, werden Sie nicht arbeiten.
Wenn Sie können, verwenden Sie moment.js . JavaScript verfügt nicht über sehr gute native Datums-/Uhrzeitmethoden. Das folgende Beispiel zeigt die Syntax von Moment:
var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
Ich habe diese Erweiterungen letzte Nacht erstellt:
Sie können entweder positive oder negative Werte übergeben.
beispiel:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);
Die einfachste Lösung.
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);
Spät zur Party, wenn Sie jedoch Es gibt ein hervorragendes Plugin namens Moment:jQuery
verwenden, dann
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
Und noch viele andere gute Sachen!
Edit: jQuery Referenz wurde dank aikerus Kommentar entfernt
Danke Jason für Ihre Antwort, die wie erwartet funktioniert, hier ist eine Mischung aus Ihrem Code und dem praktischen Format von AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Alt weiß ich, aber manchmal gefällt mir das:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Nein, Javascript hat keine eingebaute Funktion, aber Sie können eine einfache Codezeile verwenden
timeObject.setDate(timeObject.getDate() + countOfDays);
Die Mozilla-Dokumente für setDate () geben nicht an, dass Szenarien am Monatsende behandelt werden. __ Siehe https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
datum einstellen()
Deshalb verwende ich setTime (), wenn ich Tage hinzufügen muss.
Ich denke, ich werde auch eine Antwort geben:
Persönlich versuche ich gerne, eine unglückliche Variablendeklaration, Methodenaufrufe und Konstruktoraufrufe zu vermeiden, da sie alle hinsichtlich der Leistung teuer sind. (natürlich innerhalb des Grundes)
Ich wollte dies nur als Kommentar unter der von @AnthonyWJones gegebenen Antwort belassen, dachte aber besser darüber nach.
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
Das Obige wird DST respektieren. Das heißt, wenn Sie eine Anzahl von Tagen hinzufügen, die die Sommerzeit überschreiten, ändert sich die angezeigte Zeit (Stunde) entsprechend.
Beispiel:
2. Nov. 2014 02:00 war das Ende der Sommerzeit.
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
Wenn Sie die Zeit zwischen Sommerzeit beibehalten möchten (10:30 Uhr ist immer noch 10:30 Uhr) ...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
So, jetzt hast du ...
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
Ich hatte Probleme mit der Sommerzeit mit der vorgeschlagenen Lösung.
Durch die Verwendung von getUTCDate
/setUTCDate
löste ich mein Problem.
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don't mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
Ich benutze so etwas wie:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Funktioniert mit Tagessparzeit:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Funktioniert mit Neujahr:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Es kann parametrisiert werden:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
Ohne die zweite Variable können Sie 7 durch Ihre nächsten x Tage ersetzen:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
Ich verwende die folgende Lösung.
var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);
Date hat einen Konstruktor, der ein int akzeptiert. Dieses Argument steht für die gesamten Millisekunden vor/nach dem 1. Januar 1970. Es hat auch eine Methode setTime, die dasselbe tut, ohne ein neues Date-Objekt zu erstellen.
Wir konvertieren hier Tage in Millisekunden und addieren diesen Wert zu dem von getTime bereitgestellten Wert. Schließlich geben wir das Ergebnis an den Konstruktor Date (Millisekunden) oder die Methode setTime (Millisekunden) weiter.
Edit: Anstelle von setTime()
(oder setHours()
) können Sie dies folgendermaßen tun:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Alt:
Anstelle von setTime()
können Sie setHours()
verwenden:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Siehe die JSFiddle ...
Sehr einfacher Code zum Hinzufügen von Tagen im Java-Skript.
var d = new Date();
d.setDate(d.getDate() + Prompt('how many days you want to add write here'));
alert(d);
Unser Team betrachtet date-fns als die beste Bibliothek in diesem Bereich. Es behandelt Datumsangaben als immutable ( Moment.js wird wahrscheinlich niemals die Unveränderbarkeit annehmen ), es ist schneller und kann modular geladen werden.
const newDate = DateFns.addDays(oldDate, 2);
Es gibt eine setDate - und eine getDate - Methode, mit der Sie Folgendes tun können:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
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. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(siehe auch this Fiddle )
versuche dies
function addDays(date,days) {
var one_day=1000*60*60*24;
return new Date(date.getTime()+(days*one_day)).toLocaleDateString();
}
Sie können JavaScript verwenden, es ist keine jQuery erforderlich:
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
//the_day is 2013-12-31
var the_day = Date.UTC(2013, 11, 31);
// Now, the_day will be "1388448000000" in UTC+8;
var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000);
// Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800"
Für diejenigen, die Angular verwenden:
Mach einfach:
$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
Sie können hier Ihre benutzerdefinierte Hilfsfunktion erstellen
function plusToDate(currentDate, unit, howMuch) {
var config = {
second: 1000, // 1000 miliseconds
minute: 60000,
hour: 3600000,
day: 86400000,
week: 604800000,
month: 2592000000, // Assuming 30 days in a month
year: 31536000000 // Assuming 365 days in year
};
var now = new Date(currentDate);
return new Date(now + config[unit] * howMuch);
}
var today = new Date();
var theDayAfterTommorow = plusToDate(today, 'day', 2);
Übrigens ist dies eine generische Lösung zum Hinzufügen von Sekunden oder Minuten oder Tagen, was immer Sie möchten.
Generischer Prototyp ohne Variablen, gilt für einen vorhandenen Date-Wert:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
function addDays(n){
var t = new Date();
t.setDate(t.getDate() + n);
var month = "0"+(t.getMonth()+1);
var date = "0"+t.getDate();
month = month.slice(-2);
date = date.slice(-2);
var date = date +"/"+month +"/"+t.getFullYear();
alert(date);
}
addDays(5);
Ich habe diesen Ansatz verwendet, um das richtige Datum in einer Zeile zu erhalten, um die Uhrzeit und einen Tag nach den oben genannten Aussagen zu ermitteln.
((new Date()).setDate((new Date()).getDate()+1))
Ich dachte nur, ich würde einen normalen (new Date())
aufbauen:
(new Date()).getDate()
> 21
Mit dem obigen Code kann ich jetzt alles in Date()
in (new Date())
einstellen und verhält sich normal.
(new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate()
> 22
oder um das Date
Objekt zu bekommen:
(new Date(((new Date()).setDate((new Date()).getDate()+1))))
zu subtrahieren 30 Tage verwenden
new Date(+yourDate - 30 *86400000)
var yourDate=new Date();
var d = new Date(+yourDate - 30 *86400000)
console.log(d)
2,39 KB minifiziert. Eine Datei https://github.com/rhroyston/clock-js
console.log(clock.what.weekday(clock.now + clock.unit.days)); //"wednesday"
console.log(clock.what.weekday(clock.now + (clock.unit.days * 2))); //"thursday"
console.log(clock.what.weekday(clock.now + (clock.unit.days * 3))); //"friday"
<script src="https://raw.githubusercontent.com/rhroyston/clock-js/master/clock.min.js"></script>
js-joda ist eine fantastische unveränderliche Datums- und Zeitbibliothek für Javascript. Es ist ein Port von Java-8 DateTime ( JSR-310 ), der Nachfolger der berühmten Joda-Time - Bibliothek. Hier ist ein Auszug aus dem Spickzettel.
Fügen Sie 17 Tage bis heute hinzu
LocalDate.now().plusDays(17);
Sie können auch das gewünschte Datum aus mehreren Vorgängen gleichzeitig erstellen.
LocalDate.now()
.plusMonths(1)
.withDayOfMonth(1)
.minusDays(17);
Oder:
var d = LocalDate.parse('2019-02-23');
d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20'
Verwenden Sie js-joda . Es ist eine großartige unveränderliche Datums- und Zeitbibliothek für Javascript . Hier ist ein Auszug aus seinem Spickzettel.
Füge 17 Tage zum heutigen Tag hinzu
LocalDate.now().plusDays(17);
Sie können das gewünschte Datum auch aus mehreren Operationen gleichzeitig erstellen.
LocalDate.now()
.plusMonths(1)
.withDayOfMonth(1)
.minusDays(17);
Oder:
var d = LocalDate.parse('2019-02-23');
d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20'
So einfach wie dieses neue Datum ((new Date ()). GetTime () + (60 * 60 * 24 * 1000));
Ich kann nicht glauben, dass es in diesem Thread nach 5 Jahren keine Cut'n'Paste-Lösung gibt!
SO: Um die gleiche Tageszeit zu erhalten, unabhängig von Störungen im Sommer:
Date.prototype.addDays = function(days)
{
var dat = new Date( this.valueOf() )
var hour1 = dat.getHours()
dat.setTime( dat.getTime() + days * 86400000) // 24*60*60*1000 = 24 hours
var hour2 = dat.getHours()
if (hour1 != hour2) // summertime occured +/- a WHOLE number of hours thank god!
dat.setTime( dat.getTime() + (hour1 - hour2) * 3600000) // 60*60*1000 = 1 hour
return dat
or
this.setTime( dat.getTime() ) // to modify the object directly
}
Dort. Erledigt!