我想透過phpExcel讀取使用者上傳的excel資料並存到資料庫中,但在讀取到日期欄位是出現異常~~
我的測試Excel欄位的日期是 2019/09/08,格式是預設日期
透過PHPExcel_Shared_Date::ExcelToPHP讀取結果是 2036-02-15 @@
就算時差問題應該不會到17年吧,那我輸出成字串再後續處理~
參考這篇在PHP EXCEL中读取日期格式
透過PHPExcel_Style_NumberFormat :: toFormattedString(XXX,PHPExcel_Style_NumberFormat :: FORMAT_DATE_YYYYMMDD2)
讀取結果是 9/8/2019 ...格式不對呀,依照這篇格式應該要 2019-09-08才對吧??
想請問各位前輩們要如何讀出日期(yyyy-mm-dd)??
$PHPExcel = PHPExcel_IOFactory::load(current($_FILES)['tmp_name']);
$rows = $PHPExcel->getActiveSheet()->toArray(null, true, true, true);
foreach ($rows as $index => $row) {
//日期欄位是$row['B']
//方法一: 結果是 2036-02-15
//date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($row['B']))
//方法二: 結果是 9/8/2019
//PHPExcel_Style_NumberFormat :: toFormattedString($row['B'],PHPExcel_Style_NumberFormat :: FORMAT_DATE_YYYYMMDD2)
// 請問前輩們若想取得 2019-09-08 要如何處理??
// -----
//" date():9/8/2019"
$tmp1 = ' date():'.$row['B'];
// " date():1970-01-01"
$tmp2 = ' date():'.date('Y-m-d',$row['B']);
// " date():-2208297600"
$tmp3 = ' date():'.PHPExcel_Shared_Date::ExcelToPHP($row['B']);
// " date():2036-02-15"
$tmp4 = ' date():'.date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($row['B']));
//" date():9/8/2019"
$tmp5 = ' date():'.PHPExcel_Style_NumberFormat :: toFormattedString($row['B'],PHPExcel_Style_NumberFormat :: FORMAT_DATE_XLSX14 );
//" date():9/8/2019"
$tmp6 = ' date():'.PHPExcel_Style_NumberFormat :: toFormattedString($row['B'],PHPExcel_Style_NumberFormat :: FORMAT_DATE_YYYYMMDD2);
}
後來自己解決了~~~
解決方是是修改這行
$rows = $PHPExcel->getActiveSheet()->toArray(null, true, true, true);
第三個參數指的是資料要不要格式化,當然不要,所以改成false即可
剩下的用方法一就ok了
你說的 phpExcel
是指這個嗎
我是照他說的改用 PhpSpreadsheet
也可以順利的拿到日期
<?php
require 'vendor/autoload.php';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load("demo.xlsx");
$date = $spreadsheet->getActiveSheet()->getCell('A1')->getValue();
$dateFormat = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($date);
print_r($dateFormat);
result
DateTime Object
(
[date] => 2019-10-09 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
他也有轉 timestamp 等...
很多 function 可以用
剛剛有 phpWord
現在有 phpExcel
你們是講好的嗎XD