2016-08-11 76 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"; 
?>