PHPExcel将xls DATETIME更改为数字

Bjö*_*n C 2 php xls phpexcel

当我将.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();
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

扔了接受的answear我得到这个代码为我工作:

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    
Run Code Online (Sandbox Code Playgroud)

Mar*_*ker 5

没有PHPExcel不会改变它....它已经是一个数字

MS Excel将日期/时间存储为基于自1900年1月1日(或1904年1月1日,如果使用Mac日历)以来的天数的序列化时间戳....该值42285.47993055556是对应的Excel序列化时间戳2015-10-08 11:31:06.存储该值的单元格具有数字格式代码,该代码将其转换为该日期/时间的人类表示.如果更改该掩码,则会更改值的可见外观,但基础序列化值保持不变.

如果你这样做

$val[] = $cell->getFormattedValue();
Run Code Online (Sandbox Code Playgroud)

然后PHPExcel将数字格式掩码应用于该序列化日期/时间戳,并根据存储在Excel文件中的掩码返回包含该日期的人类可读格式的字符串.

如果你这样做

$val[] = PHPExcel_Shared_Date::ExcelToPHP($cell->getValue());
Run Code Online (Sandbox Code Playgroud)

那么PHPExcel将返回一个unix时间戳,您可以将其传递给PHP date()函数以进行格式化

如果你这样做

$val[] = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue());
Run Code Online (Sandbox Code Playgroud)

然后PHPExcel将返回一个PHP DateTime对象,然后您可以使用DateTime对象format()方法格式化