PHPExcel 将 xls DATETIME 更改为数字
PHPExcel changes xls DATETIME to numbers
当我将 .xls 文件上传到 PHPExcel 时,我想读取原始数据。
我阅读了有关使用 "getValue()" 的信息,它应该可以修复它。
但我不是。
所以在 .xls 中我有一列:2015-10-08 11:31
当我用 PHPExcel 处理它时,我得到:42285.47993055556
因为PHPExcel先读取文件,所以我不能用PHP创建一个DATETIME对象?!
PHP
for ($row = 2; $row <= $highestRow; ++ $row) {
$val=array();
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val[] = $cell->getValue();
我该如何解决?
抛出接受的答案我得到了这个代码为我工作:
for ($row = 2; $row <= $highestRow; ++ $row) {
$val=array();
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val[] = $cell->getValue();
}//close 2nd for loop
//Create and convert xls date to php date
$val[10] = PHPExcel_Shared_Date::ExcelToPHPObject($val[10]);
$val[10] = $val[10]->format('Y-m-d H:i:s');
//query stuff...
}//close first for loop
否PHPExcel不改变它....它已经是一个数字
MS Excel 根据自 1900 年 1 月 1 日(或 1904 年 1 月 1 日,如果使用 Mac 日历)以来的天数将 dates/times 存储为序列化时间戳.... 42285.47993055556
的值是对应于 2015-10-08 11:31:06
的 Excel 序列化时间戳。
存储此值的单元格随后具有一个数字格式代码,可将其转换为该 date/time 的人类表示形式。如果更改该掩码,它会更改值的可见外观,但底层序列化值保持不变。
如果你这样做
$val[] = $cell->getFormattedValue();
然后 PHPExcel 将数字格式掩码应用到序列化的 date/time 邮票,以及 return 包含该日期人类可读格式的字符串,基于在存储在 Excel 文件中的掩码上。
如果你这样做
$val[] = PHPExcel_Shared_Date::ExcelToPHP($cell->getValue());
然后 PHPExcel 将 return 一个 unix 时间戳,您可以将其传递给 PHP date()
函数以根据需要进行格式化
如果你这样做
$val[] = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue());
然后 PHPExcel 将 return 一个 PHP DateTime 对象,然后您可以使用 DateTime 对象 format()
方法
当我将 .xls 文件上传到 PHPExcel 时,我想读取原始数据。
我阅读了有关使用 "getValue()" 的信息,它应该可以修复它。
但我不是。
所以在 .xls 中我有一列:2015-10-08 11:31
当我用 PHPExcel 处理它时,我得到:42285.47993055556
因为PHPExcel先读取文件,所以我不能用PHP创建一个DATETIME对象?!
PHP
for ($row = 2; $row <= $highestRow; ++ $row) {
$val=array();
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val[] = $cell->getValue();
我该如何解决?
抛出接受的答案我得到了这个代码为我工作:
for ($row = 2; $row <= $highestRow; ++ $row) {
$val=array();
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val[] = $cell->getValue();
}//close 2nd for loop
//Create and convert xls date to php date
$val[10] = PHPExcel_Shared_Date::ExcelToPHPObject($val[10]);
$val[10] = $val[10]->format('Y-m-d H:i:s');
//query stuff...
}//close first for loop
否PHPExcel不改变它....它已经是一个数字
MS Excel 根据自 1900 年 1 月 1 日(或 1904 年 1 月 1 日,如果使用 Mac 日历)以来的天数将 dates/times 存储为序列化时间戳.... 42285.47993055556
的值是对应于 2015-10-08 11:31:06
的 Excel 序列化时间戳。
存储此值的单元格随后具有一个数字格式代码,可将其转换为该 date/time 的人类表示形式。如果更改该掩码,它会更改值的可见外观,但底层序列化值保持不变。
如果你这样做
$val[] = $cell->getFormattedValue();
然后 PHPExcel 将数字格式掩码应用到序列化的 date/time 邮票,以及 return 包含该日期人类可读格式的字符串,基于在存储在 Excel 文件中的掩码上。
如果你这样做
$val[] = PHPExcel_Shared_Date::ExcelToPHP($cell->getValue());
然后 PHPExcel 将 return 一个 unix 时间戳,您可以将其传递给 PHP date()
函数以根据需要进行格式化
如果你这样做
$val[] = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue());
然后 PHPExcel 将 return 一个 PHP DateTime 对象,然后您可以使用 DateTime 对象 format()
方法