2009-03-03 13 views
22

ein Datum Objekt gegeben, wie sein Vormonats ersten Tag erhält in JavascriptFinden ersten Tages des Vormonats in Javascript

+0

ein aussagekräftigeren Titel schön sein könnte ... – helloandre

+0

ich den Titel – Prestaul

+0

aktualisiert http://stackoverflow.com/questions/594054/date-problem-in-java wie Ihre vorherige Frage sieht war für Java. also nicht genau ein Duplikat :) –

Antwort

32
function firstDayInPreviousMonth(yourDate) { 
    var d = new Date(yourDate); 
    d.setDate(1); 
    d.setMonth(d.getMonth() - 1); 
    return d; 
} 

EDIT: Okay ... Ich habe hier etwas auf jeden Fall gelernt. Ich denke, dass dies die einfachste Lösung, die alle Fälle abdeckt (und ja, es für den Monat Januar nicht funktioniert):

function firstDayInPreviousMonth(yourDate) { 
    return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1); 
} 
+0

Beachten Sie, dass dies für etwas wie: FirstDayInPreviousMonth (neues Datum ("Mar 31 2009")) scheitern wird. Siehe die Kommentare auf: http://stackoverflow.com/questions/499838/javascript-date-next-month – Shog9

+0

Es würde nicht scheitern, wenn er SetDate (1) vor dem SetMonth() –

+0

Ja, das funktioniert gut. – Shog9

12

Die folgenden sollte funktionieren:

now = new Date(); 
if (now.getMonth() == 0) { 
    current = new Date(now.getFullYear() - 1, 11, 1); 
} else { 
    current = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
} 

unter Berücksichtigung, dass Monate sind null- basiert, so Dezember ist statt 12.

Aber, wie andere haben darauf hingewiesen, die Monatspackungen, auch im Rahmen des Atom-Konstruktor, so ist folgendes möglich:

now = new Date(); 
firstDayPrevMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
+1

Ich mag diesen Ansatz, aber Ihre Lösung ist eigentlich nicht korrekt. Wenn getMonth() == 1 ist, ist der Monat Februar.Sie möchten nach getMonth() == 0 suchen, und selbst das ist nicht erforderlich, da der Date-Konstruktor negative Werte akzeptiert und ordnungsgemäß funktioniert. – Prestaul

+0

Sie vernachlässigen die Tatsache, dass setMonth Werte umschließt. Prestauls Antwort funktioniert gut für Januar. – overslacked

+0

Ja, aber nicht für einen Umzug in einen Monat, wo die Anzahl der Tage leider weniger ist. Es ist besser, das neue Datum atomar als stückweise zu konstruieren. – paxdiablo

2

Ich mag diese Lösung. Es ist vielleicht nicht die kürzeste, aber es zeigt einige Funktionen des setDate() -Methode auf Date() Objekte, die nicht jeder vertraut sein mit:

function firstDayPreviousMonth(originalDate) { 
    var d = new Date(originalDate); 
    d.setDate(0); // set to last day of previous month 
    d.setDate(1); // set to the first day of that month 
    return d; 
} 

es sich die Tatsache zunutze macht, dass .setDate (0) ändert das Datum, um auf den letzten Tag des vorherigen Monats zu zeigen, während .setDate (1) es (weiter) so ändert, dass es auf den ersten Tag des jeweiligen Monats zeigt. Es lässt die Kern-Javascript-Bibliotheken das schwere Heben machen.

Sie können eine working Plunk here sehen.

0

Es wird helfen, das erste und letzte Datum des vorherigen Monats zu erhalten.

function getLastMonth(){ 
     var now = new Date(); 
     var lastday = new Date(now.getFullYear(), now.getMonth(), 0); 
     var firstday = new Date(lastday.getFullYear(), lastday.getMonth(), 1); 
     var lastMonth = firstday.getDate()+'/'+(firstday.getMonth()+1)+'/'+firstday.getFullYear()+' - '+lastday.getDate()+'/'+(firstday.getMonth()+1)+'/'+lastday.getFullYear(); 
     return lastMonth; 
} 
Verwandte Themen