首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP讀取Excel日期類型數據轉換函數:解決序列數值轉標準日期格式

     編輯:PHP 相關知識

Excel儲存日期為序列數值(如42000),需轉換為標準Y-m-d格式。提供通用轉換函數支援兩種算法。

完整轉換函數

function excelTime($date, $time = false) {
    if (function_exists('GregorianToJD')) {
        if (is_numeric($date)) {
            $jd = GregorianToJD(1, 1, 1970);
            $gregorian = JDToGregorian($jd + intval($date) - 25569);
            $date = explode('/', $gregorian);
            $date_str = str_pad($date[2], 4, '0', STR_PAD_LEFT)
                . "-" . str_pad($date[0], 2, '0', STR_PAD_LEFT)
                . "-" . str_pad($date[1], 2, '0', STR_PAD_LEFT)
                . ($time ? " 00:00:00" : '');
            return $date_str;
        }
    } else {
        // 兼容無Calendar擴展環境
        $date = $date > 25568 ? $date + 1 : 25569;
        $ofs = (70 * 365 + 17 + 2) * 86400;
        $date = date("Y-m-d", ($date * 86400) - $ofs) . ($time ? " 00:00:00" : '');
    }
    return $date;
}

算法原理解析

  1. 優先方案:利用PHP Calendar擴展GregorianToJD/JDToGregorian,基於儒略日計算,精準度高
  2. 備用方案:無Calendar擴展時,基於Unix時間戳計算(1970-01-01為基準),處理1970年前日期邊界情況
  3. Excel日期基準:1900-01-01為數值1,但Excel錯誤將1900視為閏年,故需-25569修正

使用示例

// Excel讀取到的日期欄位值
$excelDate = 43831; // 對應 2020-01-01
echo excelTime($excelDate);       // 輸出: 2020-01-01
echo excelTime($excelDate, true); // 輸出: 2020-01-01 00:00:00

相關擴展閱讀

  • PHP生成與讀取Excel文件(.csv)實例
  • PHPExcel生成和讀取Excel文件實例程序
  • PHP Excel類讀取excel文件並且導入數據庫
  • Drupal讀取Excel並導入到MySQL數據庫程序代碼
  • PHPExcel讀取excel並導入MySQL數據庫代碼

提示:現代專案建議使用PhpSpreadsheet(PHPExcel繼任者)原生支援日期格式轉換,減少手動處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved