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 バイト float に格納するのを見てきました (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";
?>
于 2016-08-11T23:16:51.460 に答える
0

私の最初の答えなので、私をあまり傷つけないでください。何をしたいのかよくわかりません(データベースに戻すか、さらに操作を実行するため、ソリューションを1つだけ投稿しました)

投稿した番号 39787.0 は UNIX タイムスタンプです。必要なものを数値に変換するにはmktimeを使用する必要があります (また、読み取り可能な形式に変換するには日付が必要です)。mktime も 1901-01-01 を開始日として使用するため、いくつかの変更を行う必要があります。

私は怠け者で、すべてのフィールドのすべてのコードを含めていませんでしたが、これにより、必要なものを追加して変更できるようになります (必要に応じて、1 行にクリーンアップすることもできます)。読みやすいように長文にしました。

    <?

    $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 に答える