我从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。还有另一种方式吗?
答案 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";
?>