2013-02-01 280 views
1

可能重複:
Converting Days into Human Readable Duration Text
How do I calculate difference in years and months given a start and end如何獲得開始和結束日期之間的時間

我使用(結束日期 - 開始日期).TotalDays返回總天數。例如,145天

但我不想總的日子。

有可能將145天轉換爲3個月和25天這樣的事情。

+4

如何定義「月」?那麼2月份呢? – SLaks

+0

是的,我無法弄清楚這個問題。我不知道如何定義月份。 – aratn0n

+1

@SLaks - 我想你會將它定義爲日曆月份,例如「從開始日期到結束日期跨越的月份障礙數量,-1如果開始日期的月份日期>結束日期的月份日期。 – mbeckish

回答

-3

嘗試使用的時間跨度來串...

+3

這根本沒有幫助。 – SLaks

0

爲了克服天問題的數量在一個月內,只要看看年月

DateTime d1 = New DateTime(2002, 1, 1); 
DateTime d2 = New DateTime(2000, 10, 1); 
int years = Math.Abs((d1.Year - d2.Year)); 
int months = ((years * 12) + Math.Abs((d1.Month - d2.Month))); 
+0

問題是關於幾個月/天。這沒有幫助... – GolfWolf

+0

同意,時間跨度不會給你#月的任何東西 – Peter

0

兩個DateTime對象結果的差異在TimeSpan對象中。由於跨月的時間在幾個月內不一致,因此TimeSpan對象如何用幾個月來表示?

爲了計算兩個日期之間的月數,您需要提前知道開始日期和結束日期,以便計算實際月數(記住閏年等)它們之間。

1

如果你假設一個月爲30天,下面的這個可能會有所幫助。

var start = DateTime.Today; 

var end = DateTime.Today.AddDays(99); 

var timeSpan = end.Subtract(start); 

var months = (int)timeSpan.TotalDays/30; 

var days = timeSpan.TotalDays % 30; 

var str = string.Format("{0} months, {1} days", months, days); 
0

如果你想年,月,日:

  1. 年=最大數年,你可以從結束日期這樣的結果仍然是減去>開始日期。
  2. Months =您可以從前一個結果中減去的最大月數,以便結果仍然>開始日期。
  3. 天=上一個結果與開始日期之間的天數。
4

有點難度比它最初看起來...

我想你可以做這樣的事情,它具有計算實際日曆月而不是數月估計要30天或類似的優勢。

var now = DateTime.Now; 
var future = DateTime.Now.AddDays(new Random().NextDouble() * 365); 
//dates above for example only 

var xx = Enumerable.Range(0,int.MaxValue) 
     .Select(i => new{numMonths = i, date = now.AddMonths(i)}) 
     .TakeWhile(x => x.date < future) 
     .Last(); 
var remainingDays = (future - xx.date).TotalDays; 
Console.WriteLine("{0} months and {1} days",xx.numMonths,remainingDays); 
+0

很好的回答!作品! – scartag

+0

我剛剛意識到如果未來<現在,事情就會出錯。不過你明白了。 – spender

+0

爲了使用LINQ表達式而不是'while'循環:-) – fero

相關問題