4

プロジェクトの 1 つでhttp://phpexcel.codeplex.comを使用していますが、問題が発生しました。私がやっているセル内に time() 値を書きたい:

function writeTimeLine($objActiveSheet, &$lineNumber, $timeStart, $timeEnd, $duration, $category, $client, $date, $comment)
{
    $objActiveSheet->setCellValue('A'.$lineNumber, PHPExcel_Shared_Date::PHPToExcel( $timeStart ));
    $objActiveSheet->getStyle('A'.$lineNumber)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
}

$objActiveSheet は $objPHPExcel->getActiveSheet() を参照します

そしてExcelでの結果は次のとおりです。

20:27:39

実際にコンピューターでテストしているときは、16:27:39 です。

タイムゾーンの問題です(私は-4の東アメリカに住んでいます)。ただし、デフォルトのタイムゾーンを設定した後、PHPExcelファイルを含めています

date_default_timezone_set('America/New_York');

time() のエコーがあっても、正しい時間 (16:27:39) が表示されます。

それはPHPExcelのバグですか、それともここで何か間違っていますか?

ご協力いただきありがとうございます。

4

4 に答える 4

4

問題が見つかりました: PHPExcel は内部で UTC 時間に変換されます: PHPExcel/Shared/Date.php

関数 PHPToExcel は、タイムゾーンを一時的に UTC に変更し、その後デフォルトのタイムゾーンに戻します。

解決策は簡単ですが、そのファイルを変更する必要があります。PHPToExcel 関数をコピーして貼り付け、名前を PHPToExcelWithoutUTC (または任意の名前) にして、次の行にコメントを付けます。

//$saveTimeZone = date_default_timezone_get();
//date_default_timezone_set('UTC');

//date_default_timezone_set($saveTimeZone);

そして、それは機能します。

編集:デフォルトで常にUTC時間を使用することを意図しているようです。ユーザーのタイムゾーンが必要な人には役立つかもしれないので、このスレッドは削除しません。

于 2012-06-04T20:45:11.173 に答える
1

You may look up to the source,

ExcelToPHP() and PHPToExcel()

https://github.com/PHPOffice/PHPExcel/blob/1.8/Classes/PHPExcel/Shared/Date.php#L115

also provide parameters so that you may convert the timezone from UTC to yours

    /**
 *    Convert a date from Excel to PHP
 *
 *    @param        integer        $dateValue            Excel date/time value
 *    @param        boolean        $adjustToTimezone    Flag indicating whether $dateValue should be treated as
 *                                                    a UST timestamp, or adjusted to UST
 *    @param        string         $timezone            The timezone for finding the adjustment from UST
 *    @return       integer        PHP serialized date/time
 */
public static function ExcelToPHP($dateValue = 0, $adjustToTimezone = false, $timezone = null)
于 2015-07-06T04:08:33.430 に答える