请问哪个函数能算出当前日期前几天是几月几号?我出300分 。急(200分)

  • 主题发起人 主题发起人 czar
  • 开始时间 开始时间
C

czar

Unregistered / Unconfirmed
GUEST, unregistred user!
哪个函数能算出当前日期前几天是几月几号,比如今天是8月1号,4天前是7月28号。
有没有有关的控件?谢谢
 
1.use function: NOW
2.use Ttimerpicker 控件
 
不用什么函数,直接用日期相加减就行了:
如当天日期的前四天
showmessage(formatdatetime('dddddd',date - 4));
当天日期的后10天
showmessage(formatdatetime('dddddd',date + 10));

 
若为了方便也可以自己写个待参数的小函数,减一下时间日期就可以了.....
 
datetime 型数据其实是 double 型的,
可以直接进行加减运算,
最后以日期格式显示即可。
 
对日期型的数据加/减就行啦!
TDateTime is a used by the date and time routines to hold date and time values.

Unit

System

type TDateTime = type Double;

Description

Most VCL objects represent date and time values using the TDateTime type. The
integral part of a TDateTime value is the number of days that have passed since
12/30/1899. The fractional part of a TDateTime value is fraction of a 24 hour
day that has elapsed.

Following are some examples of TDateTime values and their corresponding dates
and times:

0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am
To find the fractional number of days between two dates, simply subtract the
two values. Likewise, to increment a date and time value by a certain fractional
number of days, simply add the fractional number to the date and time value.
 
时间的整数部分为到一个基准时间(忘了)的天数,
你的问题只要直接相减即可,
 
procedure TForm1.Button1Click(Sender: TObject);
var
Present: TDateTime;
Year, Month, Day: Word;
begin
Present:= Now;
DecodeDate(Present, Year, Month, Day);
Label1.Caption := '今天是 ' + IntToStr(Year) + '年'
+ IntToStr(Month) +'月'
+ IntToStr(Day) + '日';
DecodeDate(Present-4, Year, Month, Day);
Label2.Caption := '4天前是 ' + IntToStr(Year) + '年'
+ IntToStr(Month) +'月'
+ IntToStr(Day) + '日';
end;
 
procedure TForm2.MaskEdit1Change(Sender: TObject);
var
Present: TDateTime;
hour,Min, Sec, MSec,Year, Month, Day,tmp: Word;
begin
Present:= Now;
DecodeTime(Present, Hour, Min, Sec, MSec);
if Hour+strtoint(maskedit1.text)<24 then begin
datenow:=now;
dtp2.Time :=encodetime(Hour+strtoint(maskedit1.text), Min, Sec, MSec);
end
else begin
decodedate(present,Year, Month, Day);
case month of
1,3,5,7,8,10,12:tmp:=31;
2:tmp:=28;
4,6,9,11:tmp:=30;
end;
if day+1<=tmp then
datenow:=encodedate(Year, Month, Day+1)
else
datenow:=encodedate(Year, Month+1, 1);
dtp2.Time :=encodetime(Hour+strtoint(maskedit1.text)-24, Min, Sec, MSec);
end;
edit4.Text :=floattostr(strtofloat(maskedit1.text)*strtofloat(box1.Text)*strtofloat(box2.text));
end;
 
datetime 型数据其实是 double 型的,
单位为天数(距1900年月日)。
小数点前面的是天数,
小数点后面的 * 24 为小时数。
 
var n:integer;
n:=...

datetostr(now-n)
formatdatetime('yyyy-mm-dd',now)
.
.
.
 
谢谢大家的帮助,这里真好
 
to czar:
wind2000 的答案简洁高效,
我只好从理论角度说明一下原因。

Crab 的答案其实和 wind2000 的一样。

bobby_ym 的答案太长,且有bug--闰年的二月份是29天。
 
后退
顶部