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'.
2 回答
完全测试
在 C# 如果你想 real months and days ,你必须做一些过程:
在 VB.net 如果你想 real months and days ,你必须做一些过程:
在 MsSQL 如果你想 real months and days ,你必须做一些过程:
我希望有用 .
这取决于您希望如何计算开始和开始的天数 . 您是否希望开始和结束的日子成为天数的一部分,或者它们是否应该以月数计算?例如,如果我在开始月份的一个月内进行了一个星期,并且从结束月份的结束开始一周,我可能从开始月份起20天,从结束月份起20天,所以你想要一个计数14个月零40天还是15个月10天?
如果您希望第二个解决方案只计算开始日期和结束日期之间的天数,则除以一个月中的平均天数,并将余数声明为日期计数 .
以下代码是aircode(未经测试) . 这有点乱,但它确实起了作用 .
如果您更喜欢第一种方法,则只需从计数中提取天数,然后计算剩余的月数,然后将最初提取的日计数添加到计数中 .
就像我说的,这取决于你想要什么 .