0

我从 Persavive V12 Db 获得数据。日期的格式很奇怪。它们就像 float :

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。还有其他方法吗?

4

2 回答 2

0

如果 39787.0 在数据库中,那么在真实日期(使用应用程序)中的值是多少?如果是 2008 年 12 月 5 日,则它是 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";
?>
于 2016-08-11T23:16:51.460 回答
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;

    ?>
于 2016-08-11T18:29:42.480 回答