2014-11-14 4 views
22

I'm trying last Tag des previous Monat bis get using:MomentJS - Wie bekomme ich den letzten Tag des vorherigen Monats vom Datum?

var dateFrom = moment(dateFrom).subtract(1, 'months').format('YYYY-MM-DD'); 

Where:

dateFrom = 2014-11-30 

Aber nachdem

subtract(1, 'months') 

date es returns using

DATE_FROM: "2014-10-30" 

Aber der letzte Tag des 10. Monats ist 31.

Wie kann ich das bitte lösen?

Vielen Dank für jede Hilfe.

Antwort

64

einfach eine endOf('month') auf Ihre Anrufe hinzufügen:

var dateFrom = moment(dateFrom).subtract(1,'months').endOf('month').format('YYYY-MM-DD');

http://jsfiddle.net/r42jg/327/

+3

Für weitere Informationen die Dokumentation prüfen [ '# endOf'] (http://momentjs.com/docs/#/manipulierend/Ende-von /). Und schau dir auch das Gegenstück ['# startOf'] an (http://momentjs.com/docs/#/manipulating/start-of/). –

+4

Anderer Weg var dateFrom = Moment (dateFrom) .startOf ('Monat') subtract (1, 'Tage'); ;-) – Cooxkie

0

Eine noch einfachere Lösung wäre moment.date(0) zu verwenden. Die .date()-Funktion nimmt den 1 bis n Tag des aktuellen Monats, aber das Übergeben einer Null oder negativen Zahl wird ein Datum in dem vorherigen Monat ergeben.

Zum Beispiel, wenn das aktuelle Datum ist 3. Februar:

var _date = moment(); // 2018-02-03 (current day) 
 
var _date2 = moment().date(0) // 2018-01-31 (start of current month minus 1 day) 
 
var _date3 = moment().date(4) // 2018-02-04 (4th day of current month) 
 
var _date4 = moment().date(-4) // 2018-01-27 (start of current month minus 5 days) 
 

 
console.log(_date.format("YYYY-MM-DD")); 
 
console.log(_date2.format("YYYY-MM-DD")); 
 
console.log(_date3.format("YYYY-MM-DD")); 
 
console.log(_date4.format("YYYY-MM-DD"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.js"></script>

Verwandte Themen