Persavise db中的日期格式

时间:2016-08-11 17:58:17

标签: php btrieve

我从Persavive V12 Db获得数据。日期是一种奇怪的格式。 他们就像浮动:

Example of date in table : 39787.0

有人知道这种格式吗?这似乎是1901-01-01的天数。

由于日期是浮点数,是否可以在PHP中添加日期?喜欢:

$from = '1901-01-01';
$date = date('Y-m-d', strtotime($from .' +'. $float .' days'));

我总是在1970-01-01。还有另一种方式吗?

2 个答案:

答案 0 :(得分:0)

我的第一个答案所以不要伤害我。 我不太确定你想做什么(放回数据库或执行进一步的操作,所以我只发布了一个解决方案)

您发布的号码39787.0是一个unix时间戳。您需要使用 mktime 将您想要的内容转换为数字(并且您需要 date 将其转换为可读形式)。由于mktime也使用1901-01-01作为开始日期,因此您必须进行一些更改。

我是一个懒惰的人,并没有包含所有字段的所有代码,但是这应该允许你修改添加你想要的任何东西(如果你愿意,可以将它清理成一行)。 我做的很长,所以很容易阅读。

    <?

    $olddate = 39787.0;
    $hour = 0;
    $min =  0;
    $sec =  0;
    $month =  0;
    $year = 0;
    $day = 12;
    $month += date("m",$olddate);
    $day += date("d",$olddate);
    $year += date("Y",$olddate);
    $x = date("Ymd",mktime($hour,$min,$sec,$month,$day,$year));
    echo $x;

    ?>

答案 1 :(得分:0)

如果数据库中有39787.0,那么实际日期(使用应用程序)的值是多少?如果它是2008-12-05,它就是一个VB日期。你知道申请书写的是什么吗?我见过人们使用VB Date数据类型并将其存储在Btrieve的一个8字节的浮点数中(早在2003年)。如果它是VB日期,则1为1899-12-31。您应该能够将号码添加到1899-12-30以获取正确的日期值。类似的东西:

<?php
$date = new DateTime('1899-12-30');
$date->add(new DateInterval('P39787D'));
echo $date->format('Y-m-d') . "\n";
?>