unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DateUtils, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
dDate: TDateTime;
AYear, AMonth, ADay, AYear2, AMonth2, ADay2: Word;
iYear, iMonth, iDay, nMonth, nDay, iBirthDay: Integer;
begin
dDate := DateTimePicker1.DateTime;
if dDate > Now then
begin
Edit1.Text := '日期非法';
Edit2.Text := '出生日期大于当前日期';
Exit;
end;
DecodeDate(dDate, AYear, AMonth, ADay);
DecodeDate(Now, AYear2, AMonth2, ADay2);
iYear := AYear2 - AYear; //计算岁数
iMonth := AMonth2 - AMonth; //相差月份
if iMonth < 0 then
begin
iYear := iYear - 1;
iMonth := iMonth + 12;
end;
iDay := ADay2 - ADay; //相差天数
if iDay < 0 then
begin
iMonth := iMonth - 1;
if iMonth < 0 then
begin
iYear := iYear - 1;
iMonth := iMonth + 12;
end;
if AMonth2 = 1 then
nMonth := 12
else
nMonth := AMonth2 - 1;
nDay := DayOfTheMonth(EndOfTheMonth(EncodeDate(AYear, nMonth, 1)));
if ADay > nDay then
iDay := ADay2
else
iDay := ADay2 + nDay - ADay;
end;
// iDay := ADay2 - ADay;
// if iDay < 0 then
// begin
// iMonth := iMonth - 1;
// if iMonth < 0 then
// begin
// iYear := iYear - 1;
// iMonth := iMonth + 12;
// iDay:=ADay2;
// end;
// end;
//
// if (iYear = 0) and (iMonth = 0) then
// iDay:= DaysBetween(Now, dDate);
Edit1.Text := Format('%d岁%d月%d天', [iYear, iMonth, iDay]);
// 计算距离生日的天数
if (AMonth = 2) and (ADay = 29) then //2月29日特殊处理
begin
if (AYear2 mod 4) = 0 then
begin
if EncodeDate(AYear2, AMonth, ADay) >= Trunc(Now) then
iBirthDay:=DaysBetween(Now, EncodeDate(AYear2, AMonth, ADay))
else
iBirthDay:=DaysBetween(Now, EncodeDate(AYear2 + 4, AMonth, ADay));
end else
begin
iBirthDay:=DaysBetween(Now, EncodeDate(AYear2 + 4 - (AYear2 mod 4), AMonth, ADay));
end;
end
else
begin
if EncodeDate(AYear2, AMonth, ADay) >= Trunc(Now) then
iBirthDay:=DaysBetween(Now, EncodeDate(AYear2, AMonth, ADay))
else
iBirthDay:=DaysBetween(Now, EncodeDate(AYear2 + 1, AMonth, ADay));
end;
Edit2.Text := Format('距离生日%d天', [iBirthDay]);
end;
end.
通过生日计算X岁X月X天,并计算距离生日的天数
最新推荐文章于 2020-08-29 12:19:58 发布