我有客户端日期验证,要求一个特定日期是从不同日期开始的一个月,所以我使用d.setMonth(d.getMonth() + 1)
并且大部分工作正常。
对于截至2009年1月31日的月末问题,它将于2009年3月3日返回,这很好 - 这就是我更喜欢它处理它的方式。
在后面的代码中,我也生成了这个日期,但DateTime.AddMonths(1)
返回2/28/2009,所以这没有用。
有什么方法吗?
答案 0 :(得分:3)
.NET功能无疑更加智能化。但是如果你想把它变得像Javascript一样,那就添加31天吧......
DateTime.AddDays(31)
答案 1 :(得分:0)
从2009年1月31日更改为2009年3月3日的示例中,您可能只想要一种方法将指定日期按其各自月份的天数推进。 (如果是在1月份,则增加31天,如果在非闰年期间增加28天,等等......)
所以你的代码看起来像:
d = d.AddDays(DateTime.DaysInMonth(d.Year, d.Month))
答案 2 :(得分:0)
添加到Josh的答案...不确定为什么要这样做但如果你确实想要一个没有内置的特定行为,请记住你有能力编写扩展。此扩展为DateTime添加了一个名为“AddMonthsJ”的方法。这给出了我认为您正在寻找的行为,并允许它易于使用。您可以将扩展名修改为您在更改月份时要查找的内容。
class Program
{
static void Main(string[] args)
{
DateTime myDate = DateTime.Parse("01/31/2009");
myDate = myDate.AddMonthsJ(1);
Console.WriteLine(myDate.ToShortDateString());
Console.ReadLine();
}
}
public static class Extensions
{
public static DateTime AddMonthsJ(this DateTime oldDate, int months)
{
return (oldDate.AddDays(months * 31));
}
}