欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享

ASP.NET计算两个日期之间相差天数(C#/[VB.NET] 两种写法)

时间:2026-07-09 14:20:06  来源:阿里站  作者:SKY  阅读:

ASP.NET C# 获取两个日期间隔天数

一、基础计算原理

DateTime 相减返回 TimeSpan 对象,TimeSpan.Days 直接获取相差完整天数; 用 .Date 剥离时分秒,避免时间干扰计算结果。

基础示例代码

<pre class="language-csharp"><code> // 定义起止日期 DateTime start = new DateTime(2026, 7, 1); DateTime end = new DateTime(2026, 7, 10); // 只对比日期,忽略时分秒 TimeSpan ts = end.Date - start.Date; int diffDay = ts.Days; // 纯间隔天数(不含起始日) int totalDay = ts.Days + 1; // 包含首尾总天数 </code></pre>

二、通用封装方法(项目直接复用)

<pre class="language-csharp"><code> /// <summary> /// 获取两日期间隔天数 /// </summary> /// <param name="start">开始日期</param> /// <param name="end">结束日期</param> /// <param name="includeAll">是否包含首尾日期</param> public static int GetDateDiff(DateTime start, DateTime end, bool includeAll = false) { TimeSpan span = (end.Date - start.Date).Duration(); return includeAll ? span.Days + 1 : span.Days; } // 调用 int dayNum = GetDateDiff(DateTime.Parse("2026-07-01"), DateTime.Parse("2026-07-08"), true); </code></pre>

.Duration() 自动处理开始日期大于结束日期,返回正数天数。

三、拓展:计算工作日(剔除周六周日)

<pre class="language-csharp"><code> public static int GetWorkDay(DateTime start, DateTime end) { int count = 0; DateTime temp = start.Date; while (temp <= end.Date) { // 排除周六、周日 if (temp.DayOfWeek != DayOfWeek.Saturday && temp.DayOfWeek != DayOfWeek.Sunday) count++; temp = temp.AddDays(1); } return count; } </code></pre>

四、新手避坑要点

  1. 不写 .Date 会受时分秒影响,跨天不足 24 小时会少算 1 天;
  2. Days 仅为差值,统计包含起止的总天数必须 + 1;
  3. WebForm、ASP.NET MVC、.NET Core 代码完全通用。

五、VB.NET简易写法(老项目)

<pre class="language-vb"><code> Dim start As DateTime = New DateTime(2026,7,1) Dim endDate As DateTime = New DateTime(2026,7,10) Dim ts As TimeSpan = endDate.Date - start.Date Dim dayDiff As Integer = ts.Days </code></pre>

本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载

发表评论 共有0条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程