2015-01-05 8 views
11

Ho un DateTimePicker in cui consento all'utente di selezionare il mese precedente all'anno corrente.Sottrai un mese da Datetime. Oggi

Il problema è che se la data è il 1 ° gennaio, non è possibile calcolare il mese di dicembre dell'anno scorso nel modo in cui lo sto facendo ora.

var today = DateTime.Today; 

var lastmonth = new DateTime(today.Year, today.Month - 1, 1); 
if (qs == "") 
{ 
    dateTimePicker1.MaxDate = lastmonth; 
    dateTimePicker1.Value = lastmonth; 
} 
else 
{ 
    DateTime dt = Convert.ToDateTime(qs); 

    dateTimePicker1.Value = dt; 
    dateTimePicker1.MaxDate = lastmonth; 
} 

risposta

31

Basta sottrarre un mese da 'adding` -1:

var lastmonth = DateTime.Today.AddMonths(-1); 

Vedere la documentazione MSDN su DateTime.AddMonths.

+0

Esiste un modo migliore di fare questo. diciamo che ho 3 pulsanti di filtro che supponiamo di ottenere dati dai precedenti 1, 6 e 9 mesi, sembra un po 'brutto (sono solo io o qualcun altro pensa lo stesso?) ad avere un mucchio di numeri negativi che vengono alimentati attraverso il Metodo AddMonths. e anche avere numeri magici nel codice? Grazie –

3

Patrick ci è riuscito. Per costruire la sua risposta e migliorare la gestione degli errori (se c'è una possibilità che qs potrebbe essere una stringa data non valida), si potrebbe fare qualcosa di simile:

DateTime qsValue; 

dateTimePicker1.MaxDate = DateTime.Today.AddMonths(-1); 

dateTimePicker1.Value = (DateTime.TryParse(qs, out qsValue)) 
    ? qsValue 
    : dateTimePicker1.MaxDate;