2016-08-11 94 views
0

我从Persavive V12 Db的数据了。日期格式很奇怪。 他们就像浮动:日期格式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

的strtotime将输出一个Unix时间戳意味着第一天更多钞票是1970年01 01 什么solfware写这个日期?也许我们可以搜索什么是日期格式。 –

+0

Pervasive数据库中的字段是否在DDF中标记为Float? Pervasive已有多年的Date字段,并不是Float。 。这是来自您开发的应用程序还是第三方?您是否联系了应用程序的供应商以了解日期格式? – mirtheil

+0

不幸的是我没有访问数据库的知道,刚刚从数据库获得数据但没有DDF。我将尝试在我的Pervasive服务器本地中查找日期格式。 –

回答

0

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

您发布的数字39787.0是一个unix时间戳。您需要使用mktime转换你想要一些什么(你需要日期将其转换为可读的形式)。由于mktime使用1901-01-01作为开始日期,所以您必须进行一些更改。

我是一个懒惰的BIZ,并没有包括所有领域的所有代码,但这应该让你修改添加任何你想要的(也可能是清理,以单行如果你想)。 我把它做成长形,所以很容易阅读。

<? 

    $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; 

    ?> 
+0

这不是Unix时间戳。由于时间戳更像'1470943987'。如果是这样,你只需要使用date('d-m-Y',$ timestamp),不需要mktime。 –

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"; 
?>