2014-11-14 18 views
22

che sto cercando di ottenere l'ultimo giorno del mese precedente utilizzando:MomentJS - Come ottenere l'ultimo giorno del mese precedente dalla data?

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

Dove:

dateFrom = 2014-11-30 

Ma dopo aver utilizzato

subtract(1, 'months') 

restituisce data

DATE_FROM: "2014-10-30" 

Ma l'ultimo giorno del decimo mese è 31.

Come posso risolvere per favore?

Molte grazie per qualsiasi aiuto.

risposta

64

Basta aggiungere un endOf('month') alle chiamate:

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

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

+3

Per ulteriori informazioni consulta la documentazione per [ '# endOf'] (http://momentjs.com/docs/#/manipolazione/fine /). E controlla anche la sua controparte ['# startOf'] (http://momentjs.com/docs/#/manipulating/start-of/). –

+4

Altro modo var dateFrom = momento (dateFrom) .startOf ('month'). Sottrarre (1, 'days'); ;-) – Cooxkie

0

Una soluzione ancora più semplice sarebbe quella di utilizzare moment.date(0). la funzione .date() richiede il giorno da 1 a n del mese corrente, tuttavia, il superamento di un numero zero o negativo produrrà una data nel mese precedente.

Per esempio, se la data corrente è 3 febbraio:

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>

Problemi correlati