首页 文章

计算月份和天数而不是年份值[关闭]

提问于
浏览
0

我想计算没有年份值的两个日期之间的月份和天数 . 它也必须包含开始和结束日期 . 谢谢 .

2 回答

  • 0

    完全测试

    C# 如果你想 real months and days ,你必须做一些过程:

    DateTime dt1 = DateTime.Parse("2011-01-01");
    DateTime dt2 = DateTime.Parse("2014-01-01");
    // because of calculate from date1 at time 00:00 to date2 at time 00:00 we must add 1 day to date2
    dt2 = dt2.AddDays(1);
    int nMonths = 0;
    while (dt1.AddMonths(1) <= dt2)
    {
        dt1 = dt1.AddMonths(1);
        nMonths++;
    }
    int nDays = dt2.Subtract(dt1).Days;
    return String.Format("{0}m{1}d", nMonths, nDays);
    

    VB.net 如果你想 real months and days ,你必须做一些过程:

    ' http://www.developerfusion.com/tools/convert/csharp-to-vb/  
    ' http://codeconverter.sharpdevelop.net/SnippetConverter.aspx
    
    Dim dt1 As DateTime = DateTime.Parse("2011-01-01")  
    Dim dt2 As DateTime = DateTime.Parse("2014-01-01")
    ' because of calculate from date1 at time 00:00 to date2 at time 00:00 we must add 1 day to date2
    dt2 = dt2.AddDays(1)  
    Dim nMonths As Integer = 0  
    While dt1.AddMonths(1) <= dt2  
        dt1 = dt1.AddMonths(1)  
        nMonths += 1  
    End While  
    Dim nDays As Integer = dt2.Subtract(dt1).Days  
    Return String.Format("{0}m{1}d", nMonths, nDays)
    

    MsSQL 如果你想 real months and days ,你必须做一些过程:

    DECLARE @dt1 DATETIME
    DECLARE @dt2 DATETIME
    DECLARE @nDays INT
    DECLARE @nMonths INT
    
    SET @dt1 = '2011/01/01'
    SET @dt2 = '2014/01/01'
    -- because of calculate from date1 at time 00:00 to date2 at time 00:00 we must add 1 day to date2
    SET dt2 = DATEADD(mm, 1, @dt1)
    WHILE (DATEADD(mm, 1, @dt1) <= @dt2)
    BEGIN
        SET @dt1 = DATEADD(mm, 1, @dt1)
        SET @nMonths = ISNULL(@nMonths, 0) + 1
    END
    SET @nDays = DATEDIFF(dd, @dt1, @dt2)
    
    PRINT CAST(@nMonths AS VARCHAR) + 'm' + CAST(@nDays AS VARCHAR) + 'd'
    -- you can create a sql function to get two date and return datediff as same as '5m8d'.
    

    我希望有用 .

  • 1

    这取决于您希望如何计算开始和开始的天数 . 您是否希望开始和结束的日子成为天数的一部分,或者它们是否应该以月数计算?例如,如果我在开始月份的一个月内进行了一个星期,并且从结束月份的结束开始一周,我可能从开始月份起20天,从结束月份起20天,所以你想要一个计数14个月零40天还是15个月10天?

    如果您希望第二个解决方案只计算开始日期和结束日期之间的天数,则除以一个月中的平均天数,并将余数声明为日期计数 .

    以下代码是aircode(未经测试) . 这有点乱,但它确实起了作用 .

    int Days = DateDiff(day, StartDate, EndDate)
    int Months = Math.Floor(Days / (365.25/12))
    Days = Days - (Months * (365.25/12))
    

    如果您更喜欢第一种方法,则只需从计数中提取天数,然后计算剩余的月数,然后将最初提取的日计数添加到计数中 .

    就像我说的,这取决于你想要什么 .

相关问题