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.