2016-08-11 5 views
0

Persavive V12 Dbからデータを取得しました。日付は奇妙な形式です。 彼らはフロートのようなものです:Persaviseデータベースからの浮動小数点データ形式

Example of date in table : 39787.0 

誰かが形式のこの種のを知っていますか?それは1901-01-01からの日数のようです。

日付は浮動小数点型なので、PHPの日付から日数を加算することはできますか? Like:

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

私は常に1970-01-01です。別の方法がありますか?

+0

のstrtotimeが出力UNIXタイムスタンプは、この日付を書いsolfwareが何であるかを1970年01 01 のですか?たぶん、日付形式が何であるかを調べることができます。 –

+0

PervasiveデータベースのフィールドはDDFのフロートとしてマークされていますか? Pervasiveは長年にわたり日付フィールドを持っていて、Floatではありません。 。あなたが開発したアプリケーションやサードパーティのアプリケーションですか?日付形式を知るためにアプリのベンダーに連絡しましたか? – mirtheil

+0

私はDBにアクセスする必要はありません知っている、ちょうどdbからDDFのデータを持っています。 Pervasiveサーバーのローカルで日付形式を調べようとします。 –

答えて

0

私の最初の答えは私をあまり傷つけません。 あなたが何をしたいのかよく分かりません(データベースに戻ったり、それ以上の操作を実行して1つの解決策を投稿しただけなので)。

投稿番号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'のようなものです。それがあれば、日付( 'd-m-Y'、$ timestamp)を使用するだけで、mktimeは必要ありません。 –

0

39787.0がデータベースにある場合、実際の日付(アプリケーションを使用しています)の値はどれですか。 2008-12-05の場合は、VB Dateです。アプリケーションの内容を知っていますか? VB Dateデータ型を使用して、Btrieveの8バイトの浮動小数点数に格納しています(2003年に戻っています)。 VB Dateの場合、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"; 
?>