怎么计算两个日期相差多少个月加多少天

cloudgamer 2011-01-19 04:22:47
怎么计算两个日期相差多少个月加多少天
关键是每个月的天数不同
又没有类似datediff的方法
...全文
628 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

DateTime dt1 = Convert.DateTime("2011-1-1");
DateTime dt2 = Convert.DateTime("2011-2-15");
TimeSpan span = dt2.Subtract(dt1);
int dayDiff = span.Days + 1; //相差的天数
int hoursDiff = span.Hours; //相差的总小时数
zcxverygood123456 2011-01-20
  • 打赏
  • 举报
回复
比分说2020年1月30日减去2011年5月3日等于多少天,系统会自动算每个月有多少天的。
zcxverygood123456 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cloudgamer 的回复:]
关键是月
天我知道
[/Quote]
==============
我曾经试过,你不用管每个月有多少天,系统会自动算的。
atmo 2011-01-20
  • 打赏
  • 举报
回复
直接减
hyrjlzw 2011-01-19
  • 打赏
  • 举报
回复
  private string DiffDate(DateTime dt1, DateTime dt2)
{
string Str = "";//返回的字符串
int MonthN = 0;//计算月份
DateTime dt, dttemp;

//始终默认dt2大
if (dt1 > dt2)
{
dttemp = dt2;
dt2=dt1;
dt1 = dttemp;
}
if (dt1.AddMonths(1) > dt2)//两日期相差不足一月
{
TimeSpan t1 = dt2 - dt1;
Str = "0月" + t1.Days.ToString() + "天";
}
else
{
if (dt2.Day >= dt1.Day)//dt2的天比dt1大
{

dt = Convert.ToDateTime(dt2.Year.ToString() + "-" + dt2.Month.ToString() + "-" + dt1.Day.ToString());
while (dt1 < dt)
{
MonthN++;
dt1 = dt1.AddMonths(1);
}
Str = MonthN + "月" + Convert.ToString(dt2.Day - dt1.Day) + "天";
}
else
{
dt = dt2.AddMonths(-1);
dt = Convert.ToDateTime(dt.Year.ToString() + "-" + dt.Month.ToString() + "-" + dt1.Day.ToString());
while (dt1 < dt)
{
MonthN++;
dt1 = dt1.AddMonths(1);
}
TimeSpan t2 = dt2 - dt;
Str = MonthN.ToString() + "月" + t2.Days.ToString() + "天";
}

}
return Str;
}

写了一个,感觉应该是考虑全面了
ycproc 2011-01-19
  • 打赏
  • 举报
回复
cloudgamer 2011-01-19
  • 打赏
  • 举报
回复
因为要用来计算价格 必须要准确
子夜__ 2011-01-19
  • 打赏
  • 举报
回复
TimeSpan
TimeSpan ts=DateTime1-DateTime2;

ts.TotalDays就是两个日期相差的天数,具体的月数就要计算了。

说说前人的看法,每个月的天数不一定,要实现“d2=d1.AddMonth(i),则subMonth(d2,d1)=i的效果”是不可能的,如,1月31日加一个月等于什么?所以微软的TimeSpan中并没有月数的计算方法。

不过实际中有时要用到月数,如我做儿童能力测试软件中就是用月龄来计算的,用的方法是
(y2 - y1)*12 + (m2 - m1) + (d2 - d1)/30 并进行四舍五入,得到月龄。

不可能得到一个精确的月数,好在实际应用中也不要求太精确,找一个差不多的公式就行了。


原文参考
cloudgamer 2011-01-19
  • 打赏
  • 举报
回复
关键是月
天我知道
apple130 2011-01-19
  • 打赏
  • 举报
回复
function DateDiff(starttime, endtime) { //例如sDate1和sDate2是2002-12-18格式
var sDate1 = starttime;
var sDate2 = endtime;
var aDate, oDate1, oDate2, iDays;
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2002格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24 //把相差的毫秒数转换为天数
return iDays;
}
ycproc 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengyarongaa 的回复:]

C# code

private string GetDiffdate(DateTime fatertime)
{
TimeSpan newdate = DateTime.Now - fatertime; //差额时间 == 当前时间 - 你的参数时间

return "";

}
[/Quote]

fatertime 是你的 要比较的 时间

wuyq11 2011-01-19
  • 打赏
  • 举报
回复
DateTime dt1 = DateTime.Now;
DateTime dt2 = new DateTime(2010, 3, 1);
int year = dt1.Year - dt2.Year; //相差的年份
int month = dt1.Year * 12 + dt1.Month - dt2.Year * 12 - dt2.Month; //相关的月份

TimeSpan ts = dt2.Subtract(dt1);
(int)(ts.TotalDays / 30));

ycproc 2011-01-19
  • 打赏
  • 举报
回复

private string GetDiffdate(DateTime fatertime)
{
TimeSpan newdate = DateTime.Now - fatertime;

return "";

}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧