Asp.net 计算月数和天数而不是年值
我想计算两个日期之间的月份和天数,没有年份值。它还必须包括开始日和结束日。谢谢。经过全面测试 在C#中,如果您想要真正的月和日,您必须执行以下过程:Asp.net 计算月数和天数而不是年值,asp.net,vb.net,Asp.net,Vb.net,我想计算两个日期之间的月份和天数,没有年份值。它还必须包括开始日和结束日。谢谢。经过全面测试 在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
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);
' 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)
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'.
DateTime dt1=DateTime.Parse(“2011-01-01”);
DateTime dt2=DateTime.Parse(“2014-01-01”);
//由于从日期1 00:00计算到日期2 00:00,我们必须在日期2上加上1天
dt2=dt2.AddDays(1);
int nMonths=0;
而(dt1.ADD月数)(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))
如果您喜欢第一种方法,只需从计数中提取天数,然后计算剩余的月数,然后将最初提取的天数添加到计数中
就像我说的,这取决于你想要什么。你有没有尝试过任何代码示例?你能帮我把你的代码转换成vb.net吗..谢谢这很简单:我在vb中使用了你最上面的C代码,如下所示:While(StDate.AddMonths(1)最后我解决了这个问题,把一天放回起始日期,然后计算它,包括最后一天/开始日期。谢谢。好的,你说得对。它从date1的00:00计算到date2的00:00;所以你必须把1天加到date2,然后开始处理……Craig,DateDiff是通过排除开始和结束日期来计算一天的。我在2005年7月1日和2006年6月30日使用它,但结果是11个月364天,这不是我的要求。在上述情况下,我的要求是:“12个月0天”。我在一个会计系统上工作,所以只有一天重要,如果可以的话,请帮助我。这是正确的。如果你只输入日期,那么该系统将被禁用et将时间设置为午夜(00:00),因此您只覆盖2005年7月1日00:00至2006年6月30日00:00。如果您只想输入日期,但希望系统计算最后一天的人数,则需要添加一天(以便查看2006年7月1日)或者添加一天,删除一秒钟。您可以这样做:int Days=DateDiff(day,StartDate,DateAdd(分钟,DateAdd(day,EndDate,1),-1))
[Aircode]。