2010-09-15 91 views
0

在此之前我使用這個功能,6月日到今天的日期..從一月獲得一天,直到如今日期

dFromYear := AddMonth(dFromDate, -5); 
dToYear := EncodeDate(iYr, iMon, DaysInMonth(iYr, iMon)); 

,但現在我想從一月獲得一天,直到如今日期.. 。例如,如果今天是2010年9月,所以我想從2010年1月到2010年9月..如果今天的日期是2009年5月,所以我想從2009年1月到2009年5月..我希望任何人都可以幫助我..謝謝

+3

你會舉一個計算示例嗎?像Svein一樣,我不太明白你的問題。 – 2010-09-15 09:19:11

回答

3

我不太確定你的意思,但是如果你想計算從一月到現在的月數,那麼DateUtils中有一個名爲MonthsBetween的函數可以爲你做。

像這樣:

program Project1; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils,DateUtils; 

var 
    vMonths : integer; 
    vFromDate, 
    vToDate : TDateTime; 

begin 
    vFromDate := EncodeDate(YearOf(Now),1,1); 
    vToDate := Now; 
    vMonths := DateUtils.MonthsBetween(vFromDate,vToDate); 

    writeln(vMonths); 
end. 
+1

你必須是通靈的。我永遠不會猜到這是問題後的...... :) – 2010-09-15 11:56:59

+0

我不是通靈,但我經常依靠我的魔法8球:-) – 2010-09-15 12:13:02

+0

要小心。在3月1日,這個計算表明只有*一個月*已經過去了。多數年來,它甚至會在下午11點24分之前給出結果。在3月2日。 – 2010-09-15 13:19:23

3

MonthsBetween函數假定一個月30.4375天長,這意味着它在很多情況下不同意,人們可以心算預期的應答,這可尷尬。如果你想自本年度1月1日已經過去了幾個月的整數,你可以更準確的無該功能:

function WholeMonthsElapsedThisYear: Integer; 
begin 
    Result := MonthOf(Date) - 1; 
end; 

在九月的任何日期,該函數將返回8.對於任何日期在1月份,它將返回0,它將在3月1日正確返回2.

+0

+1指出這一點。是要去做,但被抓住了...... :) – 2010-09-15 18:01:53

相關問題