把时间调到2009-02-28然后执行
procedure TForm1.Button1Click(Sender: TObject);
VAR T: TDateTime;
S:STRING;
begin
T:=incMonth(NOW(),1);
S:=DATETOSTR(T);
end;发现S='2009-03-28',而不是我要的2009-03-31,怎么解决?其他日期好像没有问题,就这个日期有问题!
procedure TForm1.Button1Click(Sender: TObject);
VAR T: TDateTime;
S:STRING;
begin
T:=incMonth(NOW(),1);
S:=DATETOSTR(T);
end;发现S='2009-03-28',而不是我要的2009-03-31,怎么解决?其他日期好像没有问题,就这个日期有问题!
解决方案 »
- 求教dbgrideh的问题!
- 【求救】关于Main Form 和窗口置最前面
- 如何得到当前Package的路径?
- 自动编号问题
- 判断文件类型的问题。
- 执行"Application.messagebox(‘...’); exit;"后,怎么前一窗体也关闭了?
- 进度条问题~~godnoloveihavelove(快感)进~~送分~~
- 做单机版系统,到底用Access做数据库还是用Sql Server好??? Access数据库“稳定”吗???
- pazee(耙子) , shengrong_cai(会飞的龙) 请进来拿分!
- 请教如何取得gif/jpg的大小尺寸,并实现Resize/加logo等简单处理?
- DBGrid1DrawColumnCell是个什么事件
- 关于combobox与memo 的一段小程序问题
procedure TForm1.Button1Click(Sender: TObject);
VAR
T: TDateTime;
S:STRING;
begin
T:=incMonth(NOW(),1);
if (MonthOfTheYear(now)=2) and (dayoftheMonth(now)=28) then
T:= incDay(T,3);
S:=DATETOSTR(T);
end;
VAR
T: TDateTime;
S:STRING;
begin
T:=incMonth(NOW(),1);
if (MonthOfTheYear(now)=2) and (dayoftheMonth(now)=28) then
T:= incDay(T,3);
S:=DATETOSTR(T);
end;正解
T: TDateTime;
S:STRING;
begin
T:=incMonth(NOW(),1);
if (MonthOfTheYear(now)=2) and (dayoftheMonth(now)=28) then //判断是2月并且是28天,如果是29天的话同样这样判断,下面的T:=incDay(T,2)
T:= incDay(T,3);
S:=DATETOSTR(T);
end;
dt: TDateTime;
begin
dt := RecodeDate(dt,2009,2,28);
dt := IncMonth(dt);
dt := EndOfTheMonth(dt);
ShowMessage(DateToStr(dt));
end;
dt: TDateTime;
begin
dt := RecodeDate(dt,2009,2,28);
dt := IncMonth(dt);
dt := EndOfTheMonth(dt);
ShowMessage(DateToStr(dt));
end;
procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
var
DayTable: PDayTable;
Sign: Integer;
begin
if NumberOfMonths >= 0 then Sign := 1 else Sign := -1;
Year := Year + (NumberOfMonths div 12);
NumberOfMonths := NumberOfMonths mod 12; Inc(Month, NumberOfMonths);
if Word(Month-1) > 11 then // if Month <= 0, word(Month-1) > 11)
begin
Inc(Year, Sign);
Inc(Month, -12 * Sign);
end; DayTable := @MonthDays[IsLeapYear(Year)];
if Day >= DayTable^[Month] then Day := DayTable^[Month];
end;
修改前的:
procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
var
DayTable: PDayTable;
Sign: Integer;
begin
if NumberOfMonths >= 0 then Sign := 1 else Sign := -1;
Year := Year + (NumberOfMonths div 12);
NumberOfMonths := NumberOfMonths mod 12; Inc(Month, NumberOfMonths);
if Word(Month-1) > 11 then // if Month <= 0, word(Month-1) > 11)
begin
Inc(Year, Sign);
Inc(Month, -12 * Sign);
end; DayTable := @MonthDays[IsLeapYear(Year)];
if Day >= DayTable^[Month-1] then Day := DayTable^[Month];
end;
function monthlastday(yourDay:TDateTime;x:Integer):TDateTime;
var
var YYYY, MM, DD: Word;
begin
DecodeDate(yourDay,YYYY,MM,DD);
// x:=0 下个月末;x:=1 上个月末;
case x of
0:Result:=IncDay(IncMonth(EncodeDate(YYYY,MM,1),2),-1) ;
1:Result:=IncDay(EncodeDate(YYYY,MM,1),-1) ;
else
ShowMessage('x参数只有0和1可选');
end;
end;