我需要通过AJAX为delphi服务器发送日期,该服务器接受浮点数格式的日期并设置TDateTime属性。
例如:
var
date: TDateTime;
begin
date := StrToFloat(Request.QueryFields.Values['date']);
end;德尔菲TDateTime从1989年12月30日开始,我在以下方面进行了测试:
var
date: TDateTime;
begin
date := StrToFloat('0');
ShowMessage( DateTimeToStr(date) ); // show: 30/12/1899
end;从unix时代开始的JavaScript日期,我已经测试了以下内容:
console.log(new Date(0)); // Thu Jan 01 1970 01:00:00 GMT+0100简单的转换似乎减去了差异,但没有效果,例如:
// javascipt
var delphiTime = (new Date("07-24-2019") - new Date("12-30-1899")) / 1000;
console.log(delphiTime ); // 3773084400
// delphi
ShowMessage( DateTimeToStr(3773084400) ); // show 00/00/00奇怪的是,在德尔菲上,Now是43670.654378:
ShowMessage( FloatToStr(Now) ); // 43670.654378在德尔菲0是1899年43670是2019年..。
如何在Delphi中使用日期格式,以及如何用数学将unix日期转换为delphi日期?
备注:我不能修改服务器,我需要用javascript解决客户端的问题
更新:
在Delphi中,浮点数=1为31.12.1899,2= 01.01.1900,依此类推。每个单位似乎都有一天。
function jsDateToDelphiDate(date){
const seconds = (new Date(date).getTime() - new Date("12-30-1899").getTime()) / 1000;
const days = seconds / 60 / 60 / 24;
return days;
}
console.log(jsDateToDelphiDate(new Date("07-24-2019 16:00:00"))); // 43670.625德尔菲上的43670.625是23/07/2019 15:00。
为什么我浪费了1小时?
发布于 2019-07-24 13:53:04
在JS中,valueOf日期以毫秒为单位。如果您想将其转换为天,只需将其除以24*60*60*1000。
发布于 2022-02-11 10:19:12
要将new Date().valueOf()的返回值转换为Delphi TDateTime,可以使用以下函数:
function jsDateToDelphiDate(millis: int64): TDateTime;
begin
var UnixSeconds: Integer := Round(millis / MSecsPerSec);
Result := UnixToDateTime(UnixSeconds, False);
end;https://stackoverflow.com/questions/57184472
复制相似问题