2014-06-19 5 views
15

Ich bin sicher, dass viele Leute diese Frage gestellt, aber wenn ich die Antworten überprüft scheint es mir, dass sie falsch sind, was ichhinzufügen 1 Tag bisher in Javascript

var startDate = new Date(Date.parse(startdate)); 
//The start date is right lets say it is 'Mon Jun 30 2014 00:00:00' 

var endDate = new Date(startDate.getDate() + 1); 
// the enddate in the console will be 'Wed Dec 31 1969 18:00:00' and that's wrong it should be 1 july 

fand ich weiß, dass .getDate() Rückkehr von 1-31 aber Erhöht der Browser oder das Javascript nur den Tag, ohne den Monat und das Jahr zu aktualisieren?

und in diesem Fall Sollte ich einen Algorithmus schreiben, um damit umzugehen? oder gibt es einen anderen Weg?

+1

Sie effektiv tun 'enddate = new Date (30 + 1)' -> 'new Date (31)'. Wie genau soll JS wissen, was das 31 ist? –

+1

'getDate()' _only_ gibt den Tag des Monats zurück. Es gibt nichts über Monat/Jahr –

+0

Bitte lesen Sie die Fragen erneut – kartal

Antwort

21

Beachten Sie, dass Date.getDate nur den Tag des Monats zurückgibt. Sie können einen Tag hinzufügen, indem Date.setDate Aufruf und 1.

// Create new Date instance 
var date = new Date() 

// Add a day 
date.setDate(date.getDate() + 1) 

JavaScript Anhängen wird der Monat und das Jahr für Sie automatisch aktualisiert.

EDIT:
Hier ist ein Link zu einer Seite, wo Sie alle coolen Sachen über die integrierten Date-Objekt finden, und sehen, was möglich ist: Date.

+0

, die für mich funktioniert hat Dank – kartal

1

Ich denke, was Sie suchen ist:

startDate.setDate(startDate.getDate() + 1); 

Auch Sie einen Blick auf Moment.js

eine JavaScript-Datum Bibliothek für das Parsen, Validierung, Bearbeitung und Formatierung Daten haben können.

0

Wenn es Ihnen nichts ausmacht, eine Bibliothek zu verwenden, würde DateJS (https://github.com/abritinthebay/datejs/) dies ziemlich einfach machen. Sie würden wahrscheinlich mit einer der Antworten, die JavaScript verwenden, besser dran sein, es sei denn, Sie nutzen einige andere DateJS-Funktionen wie das Parsen von ungewöhnlich formatierten Daten.

Wenn Sie DateJS eine Zeile wie diese verwenden sollte es tun:

Date.parse(startdate).add(1).days(); 

Sie könnten auch MomentJS verwenden, die ähnliche Merkmale aufweist (http://momentjs.com/), aber ich bin nicht so vertraut mit ihm.

0

Verwendung dieses Ich denke, es für Sie

var endDate=startDate.setDate(startDate.getDate() + 1); 
5

Der Date Konstruktor nützlich ist, die eine einzelne Zahl nimmt erwartet, dass die Anzahl der Millisekunden seit 31. Dezember 1969.

Date.getDate() gibt den Tagesindex für das aktuelle Datumsobjekt zurück. In Ihrem Beispiel lautet der Tag 30. Der endgültige Ausdruck ist 31, daher kehrt er 31 Millisekunden nach 31. Dezember 1969 zurück.

Eine einfache Lösung, die Ihren bestehenden Ansatz verwendet, ist stattdessen Date.getTime() zu verwenden. Fügen Sie dann einen Wert von Millisekunden im Wert von Tagen anstelle von 1 hinzu.

Zum Beispiel

var dateString = 'Mon Jun 30 2014 00:00:00'; 

var startDate = new Date(dateString); 

// seconds * minutes * hours * milliseconds = 1 day 
var day = 60 * 60 * 24 * 1000; 

var endDate = new Date(startDate.getTime() + day); 

JSFiddle

Bitte beachten Sie, dass diese Lösung nicht Ränder Fälle Tageslichtsparungen, Schaltjahre im Zusammenhang umgehen kann, usw. Es ist immer ein kostengünstiger Ansatz Verwenden Sie stattdessen eine ausgereifte Open-Source-Bibliothek wie moment.js, um alles zu handhaben.

+0

diese Lösung nicht berücksichtigt "Tag sparen" ändert, wenn ein Tag möglicherweise eine Stunde länger oder kürzer ist. – qwertzui11

+0

Sie haben Recht. Ich werde eine Notiz in meiner Antwort hinzufügen, die dies angibt, aber im Moment ist die beste Lösung, wenn Sie leichte Bibliotheken wie moment.js verwenden, um diese Randfälle ohne großen Aufwand zu vermeiden. Dies ist eine Möglichkeit, den allgemeinen Fall in 2 Zeilen zu behandeln. –

1

Es gibt Ausgabe vom 31. und 28. Februar mit getDate() Ich benutze diese Funktion getTime und 24*60*60*1000 = 86400000

var dateWith31 = new Date("2017-08-31"); 
 
var dateWith29 = new Date("2016-02-29"); 
 

 
var amountToIncreaseWith = 1; //Edit this number to required input 
 

 
console.log(incrementDate(dateWith31,amountToIncreaseWith)); 
 
console.log(incrementDate(dateWith29,amountToIncreaseWith)); 
 

 
function incrementDate(dateInput,increment) { 
 
     var dateFormatTotime = new Date(dateInput); 
 
     var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000)); 
 
     return increasedDate; 
 
    }

+1

Danke. Die einzige voll funktionsfähige Option –

+0

verbesserte ich jetzt nur noch einen Funktionsaufruf mit einem abwechslungsreichen Tag. Immer willkommen @ G.F. –

1
var datatoday = new Date(); 
var datatodays = datatoday.setDate(new Date(datatoday).getDate() + 1); 
todate = new Date(datatodays); 
console.log(todate); 

Dies wird Ihnen helfen, ...

0

Just for das Hinzufügen von Funktionen zum Date Prototyp:

In einem wandelbaren Mode/Stil:

Date.prototype.addDays = function(n) { 
    this.setDate(this.getDate() + n); 
}; 

// Can call it tomorrow if you want 
Date.prototype.nextDay = function() { 
    this.addDays(1); 
}; 

Date.prototype.addMonths = function(n) { 
    this.setMonth(this.getMonth() + n); 
}; 

Date.prototype.addYears = function(n) { 
    this.setFullYear(this.getFullYear() + n); 
} 

// etc... 

var currentDate = new Date(); 
currentDate.nextDay();