如何得到给定日期后的第30个月

本文关键字:30个月 日期 何得 | 更新日期: 2023-09-27 17:53:15

我有一个日期值varFinishDate,我从一个SQL数据库拉,我想得到varFinishDate后的一个月的30日。除非是在2月,我希望是28号。在c#中做到这一点的最好方法是什么?

在上下文中,我们有程序在运行,报告在完成后的月底到期(即使有31天,也要在30日到期)。因此,如果它在4月份完成了,那么报告的截止日期是5月30日,以此类推,除非他们在1月份完成,那么报告的截止日期是2月28日。

如何得到给定日期后的第30个月

这个怎么样?

var nextMonth = varFinishDate.AddMonths(1);
var targetDate = new DateTime(
    nextMonth.Year,
    nextMonth.Month,
    nextMonth.Month == 2 ? 28 : 30);

Use DaysInMonth();

所以你会有像

这样的东西
var nextMonth = varFinishDate.AddMonths(1);
if(nextMonth.DaysInMonth() < 30)
   nextMonth = new DateTime(nextMonth.Year, nextMonth.Month, 28);
else
    nextMonth = new DateTime(nextMonth.Year, nextMonth.Month, 30);
int day = 30;
if (finishedDate.Month == 1)
    day = 28;
DateTime nextMonth = finishedDate.AddMonths(1);
DateTime reportDate = new DateTime(nextMonth.Year, nextMonth.Month, day); 

这应该允许闰年也使用第29天:

var dueDate = varFinishDate.AddMonths(1);
if ( DateTime.DaysInMonth(dueDate.Year, dueDate.Month) < 30 ) {
      dueDate.AddDays(DateTime.DaysInMonth(dueDate.Year, dueDate.Month) - dueDate.Day);
} else {
      dueDate = new DateTime(dueDate.Year,dueDate.Month,30);
}