Net DateTime.AddMonths(1)与Javascript d.setMonth(d.getMonth()+ 1)的工作方式不同

时间:2009-09-24 17:16:32

标签: .net javascript datetime

我有客户端日期验证,要求一个特定日期是从不同日期开始的一个月,所以我使用d.setMonth(d.getMonth() + 1)并且大部分工作正常。

对于截至2009年1月31日的月末问题,它将于2009年3月3日返回,这很好 - 这就是我更喜欢它处理它的方式。

在后面的代码中,我也生成了这个日期,但DateTime.AddMonths(1)返回2/28/2009,所以这没有用。

有什么方法吗?

3 个答案:

答案 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));
    }
}