5

php-excel-readerを使用して、php スクリプトで XLS ファイルを読み取っています。日付の読み取りを除いて、すべて正常に動作しています。未定義のオブジェクトを返すだけです。

  • XLS ファイルは私のコンピューターで作成されたものではなく、作成されたウィッチ バージョンではわかりません。
  • コンピューターでファイルを開いて再度保存すると、すべて正常に動作します。(しかし、私は明らかにそれをしなければならないことを避けたいと思います)
  • php-excel-reader スクリプトを掘り下げた後、XLS から抽出した値を取得することができました。たとえば、03/05/2013 (d/m/y) の代わりに 41397

いくつかの質問 :

  • これは修正可能ですか?
  • 41397 を悪用することは可能ですか? 既知の日付形式ですか?
  • 何も変更せずにこれが機能する別の xsl to php スクリプトはありますか?
4

2 に答える 2

14

エクセル形式による41397 is 2013-05-03

Excel は、日付と時刻を、1900 年 1 月 0 日からの日数に、24 時間制の
ddddd.tttttt の小数部を加えた数値として格納します。これは、シリアル日付またはシリアル日付/時間と呼ばれます。

次のコードを使用して、数値を有効な日付に変換できます

function excelDateToDate($readDate){
    $phpexcepDate = $readDate-25569; //to offset to Unix epoch
    return strtotime("+$phpexcepDate days", mktime(0,0,0,1,1,1970));
}

php-excel-readerこれを行うことになっていますが、なぜそれを行わないのかわかりません。

ここで、Excel ストアの日付に関する詳細情報を取得できます(msdn のような本物のリファレンスではありません)。

編集:PHPExcelをチェックしました。静的関数PHPExcel_Shared_Date::ExcelToPHP($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL)がこれを行うようです。

于 2013-07-23T11:59:12.253 に答える
1

簡単な方法...

<?php $date = date_create('30-12-1899'); date_add($date, date_interval_create_from_date_string('41397 days')); echo date_format($date, 'Y-m-d'); ?>

于 2015-12-04T10:54:29.197 に答える