【问题标题】:Asp.net Get the difference between 2 date in Month and with decimal value for the day leftAsp.net 获取月份中的 2 个日期与剩余日期的十进制值之间的差异
【发布时间】:2011-01-23 17:38:11
【问题描述】:

有没有办法获得月份中两个日期之间的差异。 我想要当天的小数。

前:

First Date : 2010-12-20
Second Date : 2011-12-30

这就像这些日期之间的 1 个月零 10 天。

区别应该给我:1.33

DateTime dt = new DateTime();
dt = Convert.ToDateTime("2011-12-30"); ;

DateTime dt2 = new DateTime();
dt2 = Convert.ToDateTime("2010-12-20");

int monthDiff = System.Data.Linq.SqlClient.SqlMethods.DateDiffMonth(dt,dt2);

【问题讨论】:

    标签: asp.net datetime datediff


    【解决方案1】:

    您需要先算出整月数。然后将天数添加为一个月中天数的一小部分。如果我们一个月工作 30 天,可能是:

    int wholeMonthsDiff = ((date2.Year * 12) + date2.Month) - ((date1.Year * 12) + date1.Month);
    if (date2.Day < date1.Day) 
        wholeMonthsDiff--;
    var diff = date2 - date1.AddMonths(wholeMonthsDiff);
    double monthsDifference = wholeMonthsDiff + (diff.Days / 30d);
    

    【讨论】:

    • 谢谢,这正是我想要的。
    • 遗憾的是,每个月不是 30 天。假设会引入间歇性编码不准确
    【解决方案2】:

    您可以使用 VisualBasic-Namespace 中的 DateDiff(也可以在使用 C# 时):

    VB.Net

    Dim monthsTotal As Double = DateDiff("m", dt, dt2) + _
                                 (dt2.Day - dt.Day) / DateDiff("d", dt2, DateAdd("m", 1, dt2))
    

    C#

    double monthsTotal = DateAndTime.DateDiff("m", dt, dt2) + (dt2.Day - dt.Day) / DateAndTime.DateDiff("d", dt2, DateAndTime.DateAdd("m", 1, dt2));
    

    顺便说一句,您的示例日期的差异是 1 年 10 天而不是 1 个月和 10 天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      相关资源
      最近更新 更多