26

このコードを使用して、2012年12月5日日/月/年の形式のExcelから日付を読み取っています。PHPEXCELを使用する

   PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );

上記の日付「2012年12月5日」を「2012年12月5日」に変換する魅力のように機能します

ここで問題となるのは、日付が2012年5月18日と表示されている場合、または12より大きい日を設定した場合、この日付が2012年5月18日、この形式で2012年5月18日と表示されます。

私もこれを試しました

      $temp  = strtotime(  PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );
      $actualdate = date('Y-m-d',$temp) ;

これも日付「12/5/2012」を正しく変換していますが、この場合は18/5/2012として1970-01-01として出力されます。

4

5 に答える 5

90

この数式を使用して Excel の日付から Unix の日付に変更してください。その後、"gmdate" を使用して PHP で実際の日付を取得できます。

UNIX_DATE = (EXCEL_DATE - 25569) * 86400

Unix の日付から Excel の日付に変換するには、次の式を使用します。

EXCEL_DATE = 25569 + (UNIX_DATE / 86400)

この数式を変数に入れたら、次の例を使用して PHP で実際の日付を取得できます。

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
于 2013-02-28T13:40:15.553 に答える
29

PHPExcel を使用する場合、組み込み関数を使用できます。

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD');
于 2016-11-04T14:00:39.497 に答える
2

簡単な方法...

<?php
    $date = date_create('30-12-1899');

    date_add($date, date_interval_create_from_date_string("{$value['A']} days"));
    echo date_format($date, 'Y-m-d');
于 2015-12-04T10:58:15.090 に答える
0

変数が文字列であるか、米国形式の日付を期待しているようです。
'DateTime::createFromFormat' を使用して、日付を実際の日付形式にキャストします

$date = DateTime::createFromFormat('d/m/y', $value['A']);
echo $date->format('Y-m-d');
于 2012-06-20T14:53:17.487 に答える