2017-02-22 5 views
1

Ich muss einen Monat zu einem Datum in jQuery hinzufügen. Es ist alles in Ordnung, aber wenn das Datum 29 oder 30 oder 31 ist, habe ich ein Problem, weil der 31. November nicht existiert, der 30. Februar nicht existiert und manchmal der 29. Februar nicht existiert.Jquery Monat hinzufügen

Wenn Sie einen Monat hinzufügen möchten und der Tag für den Monat zu groß ist, reduzieren Sie den Tag auf den letzten Tag des Monats.

Das ist mein fiddle code:

$(".demo").append("<p>Right</p>"); 
 
var dateSrt = new Date(2016, 7, 24); 
 

 
for (var i = 1; i<=12; i++) { 
 
    if (i == 1) { 
 
     dateSrt.setMonth(dateSrt.getMonth()); 
 
    } else { 
 
     dateSrt.setMonth(dateSrt.getMonth() + 1); 
 
    } 
 
    var txtDay = $.datepicker.formatDate('dd-mm-yy', dateSrt); 
 
    $(".demo").append("<label>" + txtDay + "</label><br>"); 
 
} 
 

 
$(".demo").append("<p>Wrong (in this case if the date is incorrect must to be the last of the day)</p>"); 
 
var dateSrt=new Date(2016, 7, 30); 
 

 
for (var i = 1; i<=12; i++) { 
 
    if (i == 1) { 
 
     dateSrt.setMonth(dateSrt.getMonth()); 
 
    } else { 
 
     dateSrt.setMonth(dateSrt.getMonth() + 1); 
 
    } 
 
    var txtDay = $.datepicker.formatDate('dd-mm-yy', dateSrt); 
 
    $(".demo").append("<label>" + txtDay + "</label><br>"); 
 
}
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
 
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script> 
 
<div class="demo"></div>

Jeder Vorschlag?

+3

Sie sollten [momentjs] (https://momentjs.com/) verwenden, um Ihre Daten zu verwalten. – Nicolas

+1

Welche Ergebnisse wünschen Sie? Wenn Sie einen Monat bis zum 31. Januar hinzufügen möchten, wie sollte das Ergebnis sein? Das heißt, bedeutet "add a month", dass Sie 30 Tage hinzufügen, oder heißt das, dass Sie die Monatszahl erhöhen und, wenn der Tag für den Monat zu groß ist, den Tag auf den letzten Tag des Monats reduzieren? –

+0

@SergeyDenisov, dies ist kein Duplikat der Frage, auf die Sie verwiesen haben. Dieser betrifft das Rollen von Dezember bis Januar. –

Antwort

1

Scheint, wie Sie einfach, dass die neue Monatszahl ist als die aktuelle Monatszahl mehr überprüfen   +   1, dann ist der letzte Tag des Vormonats:

$('.demo').append('<p>Right</p>'); 
 
var dateSrt = new Date(2016, 6, 30); 
 
var currentDay = dateSrt.getDate(); 
 

 
for (var i = 0; i <= 11 ; i++) { 
 
    var currentMonth = dateSrt.getMonth(); 
 
    dateSrt.setMonth(currentMonth + 1, currentDay); 
 

 
    if (dateSrt.getMonth() > currentMonth + 1) { 
 
     dateSrt.setDate(0); 
 
    } 
 

 
    var txtDay = $.datepicker.formatDate('dd-mm-yy', dateSrt); 
 
    $('.demo').append('<label>' + txtDay + '</label><br>'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 
 
<div class="demo"></div>

JSFiddle

+0

Ist nicht richtig, weil nach Februar das Datum ändern (muss nur für Februar ändern) ... wenn der Tag auch ist Großartig für den Monat, reduzieren Sie den Tag bis zum letzten Tag des Monats –

+0

@FrancescoG. ok, du hast es nicht in der Frage geschrieben. Check out, bitte, jetzt, ich habe mein Code-Snippet aktualisiert. –

+0

@SergeyDenisov können Sie bitte erklären in jfiddle Link von Ihnen zur Verfügung gestellt, warum Datum beginnt 30-08-2016 nach dem Hinzufügen auf Monat in 2016, 6, 30. –

1

Dieser Ansatz erfordert die Verwendung von datejs (datejs.com) Wir im Monat zu einem Datum sehr leicht als hinzufügen:

var jan312009 = new Date(2009, 1-1, 31); 
var oneMonthFromJan312009 = new Date(jan312009).add(1).month(); 

Der Ausgang des oben so sein wird;

Sat Jan 31 2009 00:00:00 GMT+1100 (EST) 
Sat Feb 28 2009 00:00:00 GMT+1100 (EST) 

Für weitere Informationen können Sie hier finden:

http://www.markhneedham.com/blog/2009/01/07/javascript-add-a-month-to-a-date/

Dank

Auch hier arbeitet Geige Link, dates.js hinzufügen Anzahl der Monate in dem aktuellen Datum verwendet . Sie können es entsprechend ändern.

http://jsfiddle.net/J3cPD/

Dank

+1

Dies erfordert datejs (http://www.datejs.com/) Sie sollten das wahrscheinlich in Ihrer Antwort erwähnen. –

+0

@ JonathanM Ich habe datejs (datejs.com) erwähnt. Danke für die Führung –

+0

Ist nicht richtig, weil nach Februar das Datum ändern (muss nur für Februar ändern) ... wenn der Tag zu groß für den Monat ist, reduzieren Sie den Tag auf den letzten Tag des Monats ... lok hier http://jsfiddle.net/J3cPD/99/ –