2011-01-11 28 views

Respuesta

284

Otra forma de hacerlo:

DateTime today = DateTime.Today; 
DateTime endOfMonth = new DateTime(today.Year, 
            today.Month, 
            DateTime.DaysInMonth(today.Year, 
                 today.Month)); 
+6

Estaba a punto de sugerir System.Globalization.CultureInfo.CurrentCulture.Calendar.GetDaysInMonth.GetDaysInMonth, pero esto fue mucho más corto. – hultqvist

57

Algo así como:

DateTime today = DateTime.Today; 
DateTime endOfMonth = new DateTime(today.Year, today.Month, 1).AddMonths(1).AddDays(-1); 

que equivale a decir que usted obtiene el primer día del próximo mes, luego restar un día. El código del marco manejará la duración del mes, los años bisiestos y cosas por el estilo.

+1

Exactamente lo que quería escribir, pero pensé que alguien vencería a mí :) +1 – leppie

+8

Humm ... si se usa repetidamente en muchos lugares de tu código, escríbelo como un método de extensión en la clase dateTime que puedes invocar en DateTime.Now. Por ej. DateTime.Now.LastDayOfMonth(); –

-7

probar esto. Solucionará tu problema.

var lastDayOfMonth = DateTime.DaysInMonth(int.Parse(ddlyear.SelectedValue), int.Parse(ddlmonth.SelectedValue)); 
DateTime tLastDayMonth = Convert.ToDateTime(lastDayOfMonth.ToString() + "/" + ddlmonth.SelectedValue + "/" + ddlyear.SelectedValue); 
+3

Construir una 'cadena' para que pueda [analizarlo en' DateTime'] (http://msdn.microsoft.com/library/xhz1w05e.aspx#remarksToggle) es ineficiente y depende del formato de fecha de la cultura actual. Hay soluciones más limpias proporcionadas por las otras respuestas de tres años. – BACON

7
public static class DateTimeExtensions 
{ 
    public static DateTime LastDayOfMonth(this DateTime date) 
    { 
     return date.AddDays(1-(date.Day)).AddMonths(1).AddDays(-1); 
    } 
} 
+0

Esta es una gran solución cuando necesita preservar la parte del tiempo de la fecha. Las otras soluciones no hacen eso. Sugiero reescribir "AddDays (1- (date.Day))" a "AddDays (-date.Day + 1)" para aclarar el intento. – humbads

3
DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month) 
Cuestiones relacionadas