如何获得一个月的最后一天?


324

如何在C#中找到每月的最后一天?

例如,如果我的日期为1980年3月8日,如何获得第8个月的最后一天(在这种情况下为31)?


2
@Mark:我能问什么?我认为,您自己的答案不需要扩展方法。
abatishchev 2010年

4
最后一天不仅特定于月份,还需要年份。2010年2月的最后一天是28日,但2008年2月的最后一天是29
Guffa

@abatishchev它不需要扩展方法,但问题并没有真正要求它。但是,至少对我而言,它看起来更好,更易读。扩展方法无非是个建议。任何解决方案都可以使用扩展方法,而不仅仅是我的。
标记

Answers:


653

您将在该月的最后一天返回31:

DateTime.DaysInMonth(1980, 08);

28
公共静态DateTime ConvertToLastDayOfMonth(DateTime date){返回新的DateTime(date.Year,date.Month,DateTime.DaysInMonth(date.Year,date.Month)); }以日期格式获取每月的最后一天
regisbsb 2014年

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

@Henk实际上,我是从源代码中的某个位置提取此内容的,该位置DateTime从中创建了lastDayOfMonth。老实说,任何一种方法都可以很好地工作。这是一个古怪的争论,哪种方法更好。我已经做到了这两种方式,并且都给出了相同的答案。
标记

37

如果要给定一个月和一年的日期,这似乎是正确的:

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

9

从下个月的第一天开始减去:

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

另外,如果您也需要它在12月工作:

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

6

您可以通过以下代码找到任何月份的最后日期:

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

您可以通过一行代码找到月份的最后一天:

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

我想知道DateTime.DaysInMonth,为什么不是简单的方法:,为什么有人应该寻找这种难以理解和复杂的方法来实现它呢?-但作为有效的解决方案是可以接受的;)。
shA.t

5

DateTimePicker:

第一次约会:

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

最后日期:

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

2

要获取特定日历中的一个月的最后一天-以及扩展方法-:

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));

该答案仅回答提问者的例子。一个更全面的答案会更有帮助。
斯科特·劳伦斯

您可以使用所需的任何日期作为输入值,因此可以将此解决方案应用于所需的任何日期。
贾斯珀(Jasper Risseeuw)

1
它将在某些日期内失败,请尝试var myDate = new DateTime(1980, 1, 31);(返回29日)
Hans Ke st ing

汉斯·基辛,你是对的。如果下个月的日期少于当前日期,则此方法将失败。我猜最简单的方法是使用DateTime.DaysInMonth(),但这是可接受的答案,因此应删除我的答案。
贾斯珀(Jasper Risseeuw),

-1

我不了解C#,但是,事实证明,没有一种便捷的API方式来获取它,您可以通过以下逻辑来做到这一点:

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

当然,这假设您具有该类型的日期数学。


这是不正确的。
EJoshuaS-恢复莫妮卡'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.