Excel のシリアル日付形式の「日付」部分を変換することについて多くの参照を見てきましたが、誰もがその「時刻」部分をスキップしているようです。
これが私がする必要があることです:
インポートする Excel ファイルがあります。PHP使用中。
Excel 日付シリアル形式 (dddddd.tttttt) に遭遇しました。これを Unix タイムスタンプ全体に変換する必要があります。
私はいくつかの異なることを試しましたが、滑らかな動きでこれを行う方法に夢中になっています.
Excel のシリアル日付形式の「日付」部分を変換することについて多くの参照を見てきましたが、誰もがその「時刻」部分をスキップしているようです。
これが私がする必要があることです:
インポートする Excel ファイルがあります。PHP使用中。
Excel 日付シリアル形式 (dddddd.tttttt) に遭遇しました。これを Unix タイムスタンプ全体に変換する必要があります。
私はいくつかの異なることを試しましたが、滑らかな動きでこれを行う方法に夢中になっています.
この数式を使用して 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);
ありがとう。
あなたは明らかにあまり一生懸命に見えませんでした:
PHPExcel Date 処理コードから直接取得:
public static function ExcelToPHP($dateValue = 0) {
if (self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900) {
$myExcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) {
--$myExcelBaseDate;
}
} else {
$myExcelBaseDate = 24107;
}
// Perform conversion
if ($dateValue >= 1) {
$utcDays = $dateValue - $myExcelBaseDate;
$returnValue = round($utcDays * 86400);
if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) {
$returnValue = (integer) $returnValue;
}
} else {
$hours = round($dateValue * 24);
$mins = round($dateValue * 1440) - round($hours * 60);
$secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60);
$returnValue = (integer) gmmktime($hours, $mins, $secs);
}
// Return
return $returnValue;
} // function ExcelToPHP()
必要に応じて self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900 を設定して、使用している Excel ベース カレンダーを示します: Windows 1900 または Mac 1904
代わりに PHP DateTime オブジェクトが必要な場合:
public static function ExcelToPHPObject($dateValue = 0) {
$dateTime = self::ExcelToPHP($dateValue);
$days = floor($dateTime / 86400);
$time = round((($dateTime / 86400) - $days) * 86400);
$hours = round($time / 3600);
$minutes = round($time / 60) - ($hours * 60);
$seconds = round($time) - ($hours * 3600) - ($minutes * 60);
$dateObj = date_create('1-Jan-1970+'.$days.' days');
$dateObj->setTime($hours,$minutes,$seconds);
return $dateObj;
} // function ExcelToPHPObject()