﻿# C# 如何取得兩個 DateTime 日期之間的天數

在 .NET 中並沒有「直覺」的方法取得兩個 DateTime 物件之間的差異天數、月數，以致於不熟的人卻會花不少時間在找這些方法。

**取得兩個日期之間的「天數」（不足一天者採「無條件刪去法」）** 

> ```csharp
> new TimeSpan(date1.Ticks - date2.Ticks).Days
> ```

**取得兩個日期之間的「天數」（回傳型別為 double 雙精確度）**

> ```csharp
> new TimeSpan(date1.Ticks - date2.Ticks).TotalDays
> ```

**取得兩個日期之間的「小時數」（回傳型別為 double 雙精確度）**

> ```csharp
> new TimeSpan(date1.Ticks - date2.Ticks).TotalHours
> ```

**取得兩個日期之間的「分鐘數****」（回傳型別為 double 雙精確度）** 

> ```csharp
> new TimeSpan(date1.Ticks - date2.Ticks).TotalMinutes
> ```

**備註事項**

在 [TimeSpan 成員](http://msdn.microsoft.com/zh-tw/library/system.timespan_members.aspx)中，只要是 Total 開頭的屬性，都是回傳兩個時間差的「總天數」、「總時數」、「總分鐘數」、「總秒數」、「總豪秒數」，而且以 double 型別回傳，若無法整除都會有小數點出現。

另外 [Days](http://msdn.microsoft.com/zh-tw/library/system.timespan.days.aspx) 屬性是回傳不足一天者採「無條件刪去法」的天數外 (整數型別)，其餘的像是 [Hours](http://msdn.microsoft.com/zh-tw/library/system.timespan.hours.aspx), [Minutes](http://msdn.microsoft.com/zh-tw/library/system.timespan.minutes.aspx), [Seconds](http://msdn.microsoft.com/zh-tw/library/system.timespan.seconds.aspx), [Milliseconds](http://msdn.microsoft.com/zh-tw/library/system.timespan.milliseconds.aspx) 等屬性都是以用來描述該差異天數中的餘數進行表示。舉個例子說明會比較清楚：

```csharp
DateTime date1 = new DateTime(2008, 12,31, 23,59,59, DateTimeKind.Local);
DateTime date2 = new DateTime(2003, 2,13, 23,59,59, DateTimeKind.Local);
TimeSpan s = new TimeSpan(date1.Ticks - date2.Ticks);
```

上述例子中，因為回傳的「差異天數」剛好為「整數」，並沒有時、分、秒、豪秒等餘數，所以 s.[Hours](http://msdn.microsoft.com/zh-tw/library/system.timespan.hours.aspx), s.[Minutes](http://msdn.microsoft.com/zh-tw/library/system.timespan.minutes.aspx), s.[Seconds](http://msdn.microsoft.com/zh-tw/library/system.timespan.seconds.aspx), s.[Milliseconds](http://msdn.microsoft.com/zh-tw/library/system.timespan.milliseconds.aspx) 等屬性回傳值都會是 0 喔！

**參考資料：**

1.  TimeSpan 成員  
      
    [http://msdn2.microsoft.com/zh-tw/library/system.timespan\_members.aspx](http://msdn2.microsoft.com/zh-tw/library/system.timespan_members.aspx)  
      
    
2.  TimeSpan 類別  
      
    [http://msdn2.microsoft.com/zh-tw/library/system.timespan.aspx](http://msdn2.microsoft.com/zh-tw/library/system.timespan.aspx)
