使用 phpExcel 获取日期时间
Get datetime with phpExcel
我的专栏的单元格格式为:dd / mm / yyyy hh: mm,在阅读这些工作表时,我只需要获取该值并保存在mysql。
默认情况下,我正在读取日期,并利用漏洞来保存它,但日期的格式很奇怪。
单元格中的列日期:13/11/2017 00:01
我的代码:
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
//Get worksheet and built array with first row as header
$objWorksheet = $objPHPExcel->getActiveSheet();
//excel with first row header, use header as key
if($header){
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true);
$headingsArray = $headingsArray[1];
$r = -1;
$namedDataArray = array();
for ($row = 2; $row <= $highestRow; ++$row) {
$dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true);
if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
++$r;
foreach($headingsArray as $columnKey => $columnHeading) {
$namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
}
}
}
}
else{
//excel sheet with no header
$namedDataArray = $objWorksheet->toArray(null,true,true,true);
}
直接读取值时给出回显:43052.000717593
我的代码只是以我需要的格式获取日期并保存
$data_mailing_file = explode(" ", $value['field_date']);
$dataP = explode('/', $data_mailing_file[0]);
$data_save = $dataP[2].'-'.$dataP[1].'-'.$dataP[0];
43052.000717593
是一个 MS Excel 序列化时间戳值,自 1900 年 1 月 1 日(或 1904 年 1 月 1 日,如果电子表格使用 Mac日历)。
MS Excel 使用格式掩码格式化该值,您说的是 dd/mm/yyyy hh:mm
并将该值显示为 13/11/2017 00:01
,这正是我对该格式的期望面具.
如果你想以不同的方式格式化日期;那么您可以在调用 rangeToArray()
之前更改格式掩码。 Excel 格式掩码 yyyy-mm-dd
只会以适当的格式为您提供日期。
或者获取那个序列化的时间戳值,然后使用PHPExcel_Shared_Date
的ExcelToPHP()
或ExcelToPHPObject()
方法分别给出一个unix时间戳或一个PHP DateTime对象,然后您可以使用 PHP 的 date()
函数或 DateTime 对象的 format()
方法格式化。
我的专栏的单元格格式为:dd / mm / yyyy hh: mm,在阅读这些工作表时,我只需要获取该值并保存在mysql。
默认情况下,我正在读取日期,并利用漏洞来保存它,但日期的格式很奇怪。
单元格中的列日期:13/11/2017 00:01
我的代码:
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
//Get worksheet and built array with first row as header
$objWorksheet = $objPHPExcel->getActiveSheet();
//excel with first row header, use header as key
if($header){
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true);
$headingsArray = $headingsArray[1];
$r = -1;
$namedDataArray = array();
for ($row = 2; $row <= $highestRow; ++$row) {
$dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true);
if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
++$r;
foreach($headingsArray as $columnKey => $columnHeading) {
$namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
}
}
}
}
else{
//excel sheet with no header
$namedDataArray = $objWorksheet->toArray(null,true,true,true);
}
直接读取值时给出回显:43052.000717593
我的代码只是以我需要的格式获取日期并保存
$data_mailing_file = explode(" ", $value['field_date']);
$dataP = explode('/', $data_mailing_file[0]);
$data_save = $dataP[2].'-'.$dataP[1].'-'.$dataP[0];
43052.000717593
是一个 MS Excel 序列化时间戳值,自 1900 年 1 月 1 日(或 1904 年 1 月 1 日,如果电子表格使用 Mac日历)。
MS Excel 使用格式掩码格式化该值,您说的是 dd/mm/yyyy hh:mm
并将该值显示为 13/11/2017 00:01
,这正是我对该格式的期望面具.
如果你想以不同的方式格式化日期;那么您可以在调用 rangeToArray()
之前更改格式掩码。 Excel 格式掩码 yyyy-mm-dd
只会以适当的格式为您提供日期。
或者获取那个序列化的时间戳值,然后使用PHPExcel_Shared_Date
的ExcelToPHP()
或ExcelToPHPObject()
方法分别给出一个unix时间戳或一个PHP DateTime对象,然后您可以使用 PHP 的 date()
函数或 DateTime 对象的 format()
方法格式化。