如下所示,类TsDate对天软日期的一些常用方法进行了重载,使得整数日期可直接调用这些方法。
td:=new TsDate(20240329);
echo "字符串日期","---->",DateToStr(td);
echo "整数日期","---->",DateToInt(td);
DecodeDate(td,year,month,day);
echo "指定日期的年月日(成员方法)","---->","year:"$year," ","month:"$month," ","day:"$day;
class(TsDate).DecodeDate(20240329,y,m,d);
echo "指定日期的年月日(类方法)","---->","year:"$y," ","month:"$m," ","day:"$d;
echo "所在年份","---->",YearOf(td);
echo "所在月份","---->",MonthOf(td);
echo "所在日","---->",DayOf(td);
echo "所在年份的第一天","---->",StartOfTheYear(td);
echo "所在年份的最后一天","---->",EndOfTheYear(td);
echo "所在月份的第一天","---->",StartOfTheMonth(td);
echo "所在月份的最后一天","---->",EndOfTheMonth(td);
echo "所在周的第一天","---->",StartOfTheWeek(td);
echo "所在周的最后一天","---->",EndOfTheWeek(td);
echo "向前推移5年","---->",IncYear(td,-5);
echo "向前推移5月","---->",IncMonth(td,-5);
echo "向前推移5天","---->",IncDay(td,-5);
其中,类TsDate实现代码如下:
type TsDate=class
Ftd;
function create(td)
begin
Ftd:=Init(td);
end
function operator DateToStr()
begin
return ::DateToStr(Ftd);
end
function operator DateToInt()
begin
return ::DateToInt(Ftd);
end
function operator YearOf()
begin
return ::YearOf(Ftd);
end
function operator MonthOf()
begin
return ::MonthOf(Ftd);
end
function operator DayOf()
begin
return ::DayOf(Ftd);
end
class function operator DecodeDate(td,year,month,day)
begin
v:=ifObj(td)?td.Ftd:Init(td);
return ::DecodeDate(v,year,month,day);
end
function operator StartOfTheYear()
begin
return ::DateToInt(::StartOfTheYear(Ftd));
end
function operator EndOfTheYear()
begin
return ::DateToInt(::EndOfTheYear(Ftd));
end
function operator StartOfTheMonth()
begin
return ::DateToInt(::StartOfTheMonth(Ftd));
end
function operator EndOfTheMonth()
begin
return ::DateToInt(::EndOfTheMonth(Ftd));
end
function operator StartOfTheWeek()
begin
return ::DateToInt(::StartOfTheWeek(Ftd));
end
function operator EndOfTheWeek()
begin
return ::DateToInt(::EndOfTheWeek(Ftd));
end
function operator IncYear(y)
begin
return ::DateToInt(::IncYear(Ftd,y));
end
function operator IncMonth(m)
begin
return ::DateToInt(::IncMonth(Ftd,m));
end
function operator IncDay(d)
begin
return ::DateToInt(::IncDay(Ftd,d));
end
class function Init(td)
begin
return ifstring(td)?StrToDate(td):((td>=0 and td<=99991231T)?td:IntToDate(td));
end
end
运行结果如下:
