Como recebo o último dia do mês?


326

Como posso encontrar o último dia do mês em c #?

Por exemplo, se eu tenho a data 03/08/1980, como obtenho o último dia do mês 8 (neste caso, 31)?


2
@ Mark: O que posso perguntar? Sua própria resposta não requer um método de extensão, eu acho.
— abatishchev

4
O último dia não é específico apenas para o mês, você também precisa do ano. O último dia de fevereiro de 2010 é 28, mas o último dia de fevereiro de 2008 é 29.
— Guffa 22/03/10

@abatishchev Não requer um método de extensão, mas a pergunta realmente não é solicitada. No entanto, é muito melhor e muito mais legível, pelo menos para mim, vê-lo um. O método de extensão foi mais uma sugestão do que qualquer coisa. Qualquer solução funcionaria em um método de extensão, não apenas no meu.
— Mark

Respostas:


657

O último dia do mês em que você fica assim, retorna 31:

DateTime.DaysInMonth(1980, 08);

28
public estático DateTime ConvertToLastDayOfMonth (DateTime date) {retorna novo DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } para obter o último dia do mês em um formato de data
— regisbsb

177
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);

@ Henk Na verdade, eu puxei isso de um lugar em nossa fonte que cria o DateTimede lastDayOfMonth. Honestamente, de qualquer maneira funciona perfeitamente bem. É um argumento pedante de que maneira é melhor. Eu fiz isso de duas maneiras e ambas produzem a mesma resposta.
— Mark

37

Se você quer a data , dado um mês e um ano, isso parece correto:

public static DateTime GetLastDayOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month));
}

9

Subtraia um dia a partir do primeiro mês que vem:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month+1,1).AddDays(-1);

Além disso, caso você também precise trabalhar para dezembro:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1);

6

Você pode encontrar a última data de qualquer mês por este código:

var now = DateTime.Now;
var startOfMonth = new DateTime(now.Year, now.Month, 1);
var DaysInMonth = DateTime.DaysInMonth(now.Year, now.Month);
var lastDay = new DateTime(now.Year, now.Month, DaysInMonth);

6

Você pode encontrar o último dia do mês por uma única linha de código:

int maxdt = (new DateTime(dtfrom.Year, dtfrom.Month, 1).AddMonths(1).AddDays(-1)).Day;

Está me perguntando que, em vez de um método simples: DateTime.DaysInMonthpor que alguém deveria procurar essa maneira ilegível e complexa de alcançá-la !? - Mas como uma solução válida é aceitável;).
— shA.t

5

De DateTimePicker:

Primeiro encontro:

DateTime first_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, 1);

Última data:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month));

2

Para obter o último dia do mês em um calendário específico - e em um método de extensão -:

public static int DaysInMonthBy(this DateTime src, Calendar calendar)
{
    var year = calendar.GetYear(src);                   // year of src in your calendar
    var month = calendar.GetMonth(src);                 // month of src in your calendar
    var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar
    return lastDay;
}

2
// Use any date you want, for the purpose of this example we use 1980-08-03.
var myDate = new DateTime(1980,8,3);
var lastDayOfMonth = new DateTime(myDate.Year, myDate.Month, DateTime.DaysInMonth(myDate.Year, myDate.Month));

Essa resposta responde apenas ao exemplo do questionador. Uma resposta mais abrangente seria mais útil.
— Scott Lawrence

Você pode usar qualquer data que desejar como valor de entrada, para poder aplicar esta solução a qualquer data que desejar.
— Jasper Risseeuw 15/10/1918

1
Ele falhará em algumas datas, tente var myDate = new DateTime(1980, 1, 31);(retorna o dia 29) #
— 501 Hans

Hans Keing, você está certo. Este método falhará se o próximo mês tiver menos dias que o atual. Eu acho que a maneira mais fácil é usar DateTime.DaysInMonth (), mas essa é a resposta aceita, então minha resposta deve ser excluída.
— Jasper Risseeuw 15/10/1918

-1

Eu não sei C #, mas, se não houver uma maneira conveniente de obter API, uma das maneiras de fazer isso é seguindo a lógica:

today -> +1 month -> set day of month to 1 -> -1 day

Obviamente, isso pressupõe que você tenha a matemática da data desse tipo.


Isso não é exato.
— EJoshuaS - Restabelece Monica
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.