需要使用php为vbscript命令cdbl(现在)提供等效的解决方案吗

需要使用php为vbscript命令cdbl(现在)提供等效的解决方案吗,php,vbscript,Php,Vbscript,使用vbscript,我可以使用命令cdbl(now)从当前日期/时间中检索双精度值 我正在寻找一个与php等效的解决方案,它将从当前日期/时间返回一个双倍值。cdbl返回microsoft格式的日期时间。逗号日期之前-自1900年1月1日起的天数。逗号时间后-24小时为1。所以,如果您在Unix epoch中使用日期(代码可能无效,我想让它更容易理解) 结果: 42133.905671296 正如你所看到的,有一个取整的问题。如果在求和前打印计算时间的结果,答案将与您的相同。我从来没有做过计

使用vbscript,我可以使用命令
cdbl(now)
从当前日期/时间中检索双精度值


我正在寻找一个与php等效的解决方案,它将从当前日期/时间返回一个双倍值。

cdbl返回microsoft格式的日期时间。逗号日期之前-自1900年1月1日起的天数。逗号时间后-24小时为1。所以,如果您在Unix epoch中使用日期(代码可能无效,我想让它更容易理解)

结果:

42133.905671296
正如你所看到的,有一个取整的问题。如果在求和前打印计算时间的结果,答案将与您的相同。我从来没有做过计算任务,所以我不能告诉你怎么做。唯一的建议是转换为字符串:)


如果您选择在Unix日期之外工作,您应该编写一些代码,下面的函数将当前Unix时间戳作为双精度值返回:

function cdblnow(){
    // time in seconds since 1 Jan 1970 (GMT)
    $timeunix = time();
    // add the timezone offset
    $TimeZone = "Asia/Bangkok";
    $dateTimeZone = new DateTimeZone($TimeZone);
    $dateTime = new DateTime("now", $dateTimeZone);
    $timeOffset = $dateTimeZone->getOffset($dateTime);
    $timeunix = $timeunix + $timeOffset;
    // determines the days between 1 Jan 1970 and today
    $days = intval($timeunix / 86400);
    // second count from today
    $secondsremains = $timeunix % 86400;
    // 25569 days difference between microsoft and unix time stamp start
    $now_date = $days + 25569;
    // 0.0000115741 represents one second at the cdbl-function from microsoft
    $now_time = $secondsremains * 0.0000115741;
    return $now_date + $now_time;}
此函数用于从双精度计数器返回unix时间戳:

function GetUnixTimeFromCdblNow($cdbl){
$days = intval($cdbl);
$seconds = round($cdbl - $days,9);
$timeunix = (($days -25569) * 86400);
$timeunix = $timeunix + intval($seconds / 0.0000115740);
return $timeunix;}

如何将函数更改为不传递,并在函数中使用格式化的日期字符串?我只希望函数使用php func time()获取当前的日期/时间值,将其转换并返回。与带cdbl的vbscript(现在)的行为相同。如何调用该函数。php中没有函数now()。询问cbbl(日期('Y-m-d H:i:s'))-相同。顺便说一下,如果答案有帮助,请不要忘记接受它:)或定义函数now()
{returndate('Y-m-dh:i:s');}
,这样您就可以调用
cdbl(now())
php的func time()类似于cdbl(now))。因此,不必向函数发送日期格式的字符串来获取当前时间。我只想调用不带任何参数的函数并返回转换后的值。我只是尽量避免格式化日期字符串的开销。有什么问题吗?假设为函数的第一行,$str=date('Y-m-d H:i:s',$str)
function cdblnow(){
    // time in seconds since 1 Jan 1970 (GMT)
    $timeunix = time();
    // add the timezone offset
    $TimeZone = "Asia/Bangkok";
    $dateTimeZone = new DateTimeZone($TimeZone);
    $dateTime = new DateTime("now", $dateTimeZone);
    $timeOffset = $dateTimeZone->getOffset($dateTime);
    $timeunix = $timeunix + $timeOffset;
    // determines the days between 1 Jan 1970 and today
    $days = intval($timeunix / 86400);
    // second count from today
    $secondsremains = $timeunix % 86400;
    // 25569 days difference between microsoft and unix time stamp start
    $now_date = $days + 25569;
    // 0.0000115741 represents one second at the cdbl-function from microsoft
    $now_time = $secondsremains * 0.0000115741;
    return $now_date + $now_time;}
function GetUnixTimeFromCdblNow($cdbl){
$days = intval($cdbl);
$seconds = round($cdbl - $days,9);
$timeunix = (($days -25569) * 86400);
$timeunix = $timeunix + intval($seconds / 0.0000115740);
return $timeunix;}