如何能得到两个日期之间的天数和月数?(50分)

  • 主题发起人 主题发起人 tomni
  • 开始时间 开始时间
是TDateTime类型吗?
 
正好有一段程序
天数计算:
function DaysOfMonth(y,m:integer):integer;//y代表年,m代表月
const
days:array [1..12] of integer=(31,28,31,30,31,30,31,31,30,30,30,31);
begin
if m=0 then
begin
y:=y-1;
m:=12;
end
else
if m=13 then
begin
y:=y+1;
m:=1;
end;
if m<>2 then
begin
Result:=days[m];
exit;
end;
if (y mod 400=0) then
Result:=29
else
if ((y mod 4=0) and (not(y mod 100=0))) then
Result:=29
else
Result:=28;
end;

function CurrentWeek:integer;
var
n1,i1:integer;
function DaysOfYear(y1:integer):integer;//测试此是否为闰年
begin
if (y1 mod 400=0) then
Result:=366
else
if ((y1 mod 4=0) and (not(y1 mod 100=0))) then
Result:=366
else
Result:=365;
end;
begin
n1:=1+Date;
for i1:=1980 to Year-1do
n1:=n1+DaysOfYear(i1);
if Month<>1 then
for i1:=1 to Month-1do
n1:=n1+DaysOfMonth(Year,i1);
n1:=n1 mod 7;
if n1=0 then
Result:=7
else
Result:=n1;
end;
此程序中的year,month,date分别代表程序中的年、月、日,程序中以1980年1月1日的日期为起始日期,你也可以自已改
至于计算月,自已在根据以上程序再想想
 
如果是TDATETIME,天数只要用两个日期相减,再取个整就可以了。
NoOfDays := Trunc(DateTime1-DateTime2);
至于月份就繁一点了,可以用
DecodeDate(Date: TDateTime;
var Year, Month, Day: Word)实现
Decode(DateTime1,Year1,Month1,Day1);
Decode(DateTime2,Year2,Month2,Day2);
NoOfDays := (Year1-Year2)*12+(Month1-Month2);
 
最后一行应该是
NoOfMonths := (Year1-Year2)*12+(Month1-Month2);
 
我的那段程序是用来获得当前日期是星期几的,你可以自己修改成符合你要求的程序。
 
Delphi中的日期型函数是否有千年问题?
 
procedure TForm1.Button1Click(Sender: TObject);
var
v1,v2:TDate;//TDateTime 是一个do
uble 类型, 整数部分表示年月日, 小数部分表示时间.
TData 是一个 TDataTime 类型, 小数部分全为零, 因此 Date1-Date2是天数差
begin
ShortDateFormat:='y/m/d';
DateSeparator := '-';
v1:=StrToDate('1998-12-26');
v2:=StrToDate('1997-11-2');
MessageDlg('相差天数为:'+IntToStr(Trunc(v1-v2)),mtInformation,[mbOK],0);
end;
 
浦欣,
Delphi中有求星期的函数:
DayOfWeek(Date: TDateTime): Integer
没有千年问题。
 
多人接受答案了。
 
后退
顶部