计算月份和天数而不是年份值

时间:2014-01-08 07:15:24

标签: asp.net vb.net

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

2 个答案:

答案 0 :(得分:1)

完全测试

如果您想要真实的月份和日期,请 C#,您必须执行以下操作:

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 中,如果您想要真实月份和日期,则必须执行以下操作:

' 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 ,您必须执行以下操作:

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 :(得分:0)

这取决于您希望如何计算开始和开始的天数。您是否希望开始和结束的日子成为天数的一部分,或者它们是否应该以月数计算?例如,如果我在开始月份的一个月中有一个星期而且从结束月份结束的一周后我可能从开始月份起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)) 

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

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