407 Stimmen

Berechnung des letzten Tages des Monats

Wenn Sie 0 als die dayValue en Date.setFullYear erhalten Sie den letzten Tag des Vormonats:

d = new Date(); d.setFullYear(2008, 11, 0); //  Sun Nov 30 2008

Ein Hinweis auf dieses Verhalten findet sich unter mozilla . Ist dies eine zuverlässige browserübergreifende Funktion oder sollte ich mir alternative Methoden ansehen?

22voto

Nigel Punkte 1241

Eine geringfügige Änderung der Lösung, die von Brise :

function daysInMonth(iMonth, iYear)
{
    return new Date(iYear, iMonth, 0).getDate();
}

16voto

Eric Punkte 503

Ich musste vor kurzem etwas Ähnliches machen, und das ist das, was ich herausgefunden habe:

/**
* Returns a date set to the begining of the month
* 
* @param {Date} myDate 
* @returns {Date}
*/
function beginningOfMonth(myDate){    
  let date = new Date(myDate);
  date.setDate(1)
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);   
  return date;     
}

/**
 * Returns a date set to the end of the month
 * 
 * @param {Date} myDate 
 * @returns {Date}
 */
function endOfMonth(myDate){
  let date = new Date(myDate);
  date.setDate(1); // Avoids edge cases on the 31st day of some months
  date.setMonth(date.getMonth() +1);
  date.setDate(0);
  date.setHours(23);
  date.setMinutes(59);
  date.setSeconds(59);
  return date;
}

Geben Sie ein Datum ein, und es wird ein Datum zurückgegeben, das entweder auf den Monatsanfang oder auf das Monatsende eingestellt ist.

En begninngOfMonth Funktion ist ziemlich selbsterklärend, aber was in die endOfMonth Funktion ist, dass ich den Monat auf den nächsten Monat hochzähle und dann mit setDate(0) um den Tag auf den letzten Tag des Vormonats zurückzudrehen, was ein Teil der setDate-Spezifikation ist:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate https://www.w3schools.com/jsref/jsref_setdate.asp

Ich setze dann die Stunde/Minuten/Sekunden auf das Ende des Tages, so dass, wenn Sie eine Art von API verwenden, die einen Datumsbereich erwartet, Sie in der Lage sind, die Gesamtheit des letzten Tages zu erfassen. Dieser Teil könnte über das hinausgehen, was der ursprüngliche Beitrag fragt nach, aber es könnte jemand anderes auf der Suche nach einer ähnlichen Lösung helfen.

Bearbeiten: Sie können auch einen Schritt weiter gehen und die Millisekunden mit setMilliseconds() wenn Sie besonders genau sein wollen.

8voto

Wie man es NICHT macht

Hüten Sie sich vor Antworten für den letzten Tag des Monats, die so aussehen:

var last = new Date(date)
last.setMonth(last.getMonth() + 1) // This is the wrong way to do it.
last.setDate(0)

Dies funktioniert bei den meisten Daten, schlägt aber fehl, wenn date bereits der letzte Tag des Monats ist, in einem Monat, der mehr Tage hat als der Folgemonat.

Ejemplo:

Angenommen, date es 07/31/21 .

Entonces last.setMonth(last.getMonth() + 1) erhöht den Monat, behält aber den Tag bei 31 .

Sie erhalten ein Date-Objekt für 08/31/21 ,

das ist eigentlich 09/01/21 .

Also dann last.setDate(0) führt zu 08/31/21 obwohl wir eigentlich wollten, dass 07/31/21 .

6voto

artsylar Punkte 2560

Versuchen Sie dies.

lastDateofTheMonth = new Date(year, month, 0)

Beispiel:

new Date(2012, 8, 0)

Ausgabe:

Date {Fri Aug 31 2012 00:00:00 GMT+0900 (Tokyo Standard Time)}

5voto

Das funktioniert bei mir. Liefert den letzten Tag des jeweiligen Jahres und Monats:

var d = new Date(2012,02,0);
var n = d.getDate();
alert(n);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X