网格中两个日期之间的差异

时间:2011-07-07 08:37:30

标签: delphi delphi-7 delphi-xe tcxgrid

我正在尝试计算网格中两个日期之间差异的天数。 这种工作但最初会产生奇怪的结果: 这是TEMP表的Oncalculate fields事件:

TEMP.FieldByName('DAYS').asstring := IntToStr(Daysbetween(TEMP.FieldByName('BIV_OD').AsDateTime,TEMP.FieldByName('BIV_DO').AsDateTime));

BIV_OD和BIV_DO是日期字段(例如... Date_From - Date-to) 当我选择网格中的第一个日期(BIV_OD)时,我的DAYS字段首先显示40731(??) 然后当我输入第二个日期时一切正常。 那是为什么?

1 个答案:

答案 0 :(得分:2)

这就是你要求的......

德尔福将日期存储为自1988年12月31日以来的天数,所以当您写第一个日期时,您正在做40731(自18/12/18以来的天数) - 0,因为您还没有输入第二次约会。

解决方案不是计算字段,除非填写两个日期。

if (Temp.FieldByName('BIV_OD').AsDateTime > 0) and (TEMP.FieldByName('BIV_DO').AsDateTime > 0) then
    TEMP.FieldByName('DAYS').AsString:= IntToStr(Daysbetween(TEMP.FieldByName('BIV_OD').AsDateTime,TEMP.FieldByName('BIV_DO').AsDateTime))
else
    TEMP.FieldByName('DAYS').AsString:= ''; //don't display anything. 

虽然我将网格列设置为具有整数的数据类型。

if (Temp.FieldByName('BIV_OD').AsDateTime > 0) and (TEMP.FieldByName('BIV_DO').AsDateTime > 0) then
    TEMP.FieldByName('DAYS').AsInteger:= Daysbetween(TEMP.FieldByName('BIV_OD').AsDateTime,TEMP.FieldByName('BIV_DO').AsDateTime)
else
    TEMP.FieldByName('DAYS').Value := Null; //don't display anything.