2

これが私のスプレッドシートの内容です。

12/04/2011  8:56:17 p.m. (xls dateserial = 40645.87242)

これは、PHPで日付を抽出して日付文字列に変換するために使用しているコードです。

$txn_date_xls = $sheet->getCell("H$row")->getValue();               
echo "Txn Date (original): $txn_date_xls<br />";

$txn_date = PHPExcel_Shared_Date::ExcelToPHP($txn_date_xls);
echo "Txn Date: ".date('Y-m-d H:i:s', $txn_date)."<br />";

これは私のスクリプトからの出力です:

Txn Date (original): 40644.55783637732
Txn Date: 2011-04-11 13:23:17

日付シリアルが元のスプレッドシートと一致しません。そのため、これがPHPExcelのバグなのか、セルからdateserialを抽出する前に行う必要のある設定などを見逃したのかを判断しようとしています。おそらくタイムゾーンの問題ですか?

申し訳ありませんが、私はまだPHPExcelライブラリに精通していません。

4

2 に答える 2

10

これについてはよくわかりませんが...

PHPの関数date()は、サーバーのタイムゾーン設定によって異なります。

PHPExcel_Shared_Date :: ExcelToPHP()は、指定された日付がGMTであると想定し、それに応じてUnix時間を返します。

したがって、スクリプトの先頭でPHPタイムゾーンのGMT / UTCを設定してみてください(date_default_timezone_set()を使用)

date_default_timezone_set('UTC');

またはこのように(ini_set()を使用)

ini_set('date.timezone', 'UTC');

また、date()の代わりにgmdate()を使用してみてくださいそうないと、1日のオフセットが発生する可能性があります

使用可能なリンク:

于 2011-04-14T01:57:46.693 に答える
2

定義

date_default_timezone_set(YOUR_TIME_ZONE);

この行を変更します。

date('Y-m-d H:i:s', $txn_date)

に:

 PHPExcel_Style_NumberFormat::toFormattedString($txn_date_xls, 'Y-m-d H:i:s')
于 2015-01-30T08:16:44.630 に答える