2013-02-11 4 views

risposta

3

Ecco un modo per trovarlo:

var now = new DateTime.now(); 

// Find the last day of the month. 
var beginningNextMonth = (now.month < 12) ? new DateTime(now.year, now.month + 1, 1) : new DateTime(now.year + 1, 1, 1); 
var lastDay = beginningNextMonth.subtract(new Duration(days: 1)).day; 

print(lastDay); // 28 for February 

ho la data corrente, in modo da costruire il primo giorno del mese successivo, e poi sottrarre un giorno fuori di esso. Sto anche prendendo in considerazione il cambiamento dell'anno.

Aggiornamento: Ecco il codice un po 'più breve per la stessa cosa, ma ispirato da Chris zero trucco:

var now = new DateTime.now(); 

// Find the last day of the month. 
var lastDayDateTime = (now.month < 12) ? new DateTime(now.year, now.month + 1, 0) : new DateTime(now.year + 1, 1, 0); 

print(lastDayDateTime.day); // 28 for February 

Ha il controllo/codice aggiuntivo, nel caso in cui si vuole fare questo a livello di codice (ad es. hai un mese specifico come numero intero).

+0

noti che sottraendo 1 giorno (= 24 ore) non funzionerebbe se siete esattamente alla data in cui la luce del giorno -Il risparmio è disattivato. In questo caso, probabilmente non importa poiché i giorni di passaggio non sono mai (?) L'ultimo giorno del mese. –

+0

Hai ragione. E ci sono i giorni di cambio nell'ultimo giorno del mese. –

10

Fornire un valore del giorno zero per il prossimo mese vi dà l'ultimo giorno del mese precedente

var date = new DateTime(2013,3,0); 
print(date.day); // 28 for February 
+0

Si tratta di un effettivo utilizzo legittimo di DateTime? In tal caso, potremmo voler aggiornare la documentazione per DateTime? –

+0

Neat. Suppongo che questo rimanga così com'è in futuro? –

+1

Sì. questo è un comportamento garantito. –