2010-09-15 97 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

相关问题