【问题标题】:how to get date from excel using PHPExcel library如何使用 PHPExcel 库从 excel 中获取日期
【发布时间】:2013-10-30 05:37:35
【问题描述】:

我正在尝试使用 PHPExcel 从 excel 中获取日期。但我没有得到日期,我得到的字符串值不是 1970 年的秒数。

我试过的代码是

$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());

【问题讨论】:

    标签: php date phpexcel


    【解决方案1】:

    尝试使用

    $cell = $excel->getActiveSheet()->getCell('B' . $i);
    $InvDate= $cell->getValue();
    if(PHPExcel_Shared_Date::isDateTime($cell)) {
         $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
    }
    

    附言

    @DiegoDD:应该提到 $format 是所需的日期格式。例如:

     $InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
    

    附言 2019 用新版本的 PhpOffice 看答案@gabriel-lupu https://stackoverflow.com/a/45070205/426533

    【讨论】:

    • 如果我能在 2 个月前找到这个!谢谢!
    • 感谢最近几天的正常搜索
    • 应该提到 $format 是日期的所需格式。例如$InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate));
    • 非常感谢!你为我节省了很多时间:)
    • 只是提醒任何引用另一个单元格的人;第一个 $InvDate 需要是 $cell->getCalculatedValue();在这种情况下。
    【解决方案2】:

    对于日期,getValue() 应该返回一个浮点数,这是该日期/时间的 Excel 序列化时间戳值...我怀疑是您的 trim() 将其转换为字符串。实际值是自 1900 年 1 月 1 日(或 1904 年 1 月 1 日,具体取决于电子表格使用的日历)以来的天数。

    调用 getFormattedValue() 或 getCalculatedValue() 而不是 getValue() 应该根据单元格的 numberformatmask 返回格式化为人类可读字符串的日期。

    或者,Sergey 的解决方案测试单元格是否具有日期/时间数字格式掩码,并调用适当的帮助方法将 Excel 序列化时间戳转换为 unix 时间戳,然后使用普通 PHP 日期函数将其格式化为人类可读$格式的值。有一个类似的帮助方法 PHPExcel_Shared_Date::ExcelToPHPObject() 可以将 Excel 序列化时间戳转换为 PHP DateTime 对象

    【讨论】:

      【解决方案3】:

      在新版本的库PhpOffice中,处理这个问题的函数是excelToDateTimeObject,所以新的代码格式应该是:

      $cell = $excel->getActiveSheet()->getCell('B' . $i);
      $InvDate= $cell->getValue();
      if (PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) {
           $InvDate = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate); 
      }
      

      【讨论】:

        【解决方案4】:

        您可以通过这种方式将单元格值作为字符串(也是日期值):

        $sheet = $objPHPExcel->getActiveSheet();
        $lastRow = $sheet->getHighestRow();
        $lastColumn = $sheet->getHighestColumn();
        
        $rows = $sheet->rangetoArray('A2:'.$lastColumn . $lastRow, NULL, True, True, False);
        foreach ($rows as $row => $cols) {
            foreach($cols as $col => $cell) {
                echo trim($cell).'<br>'; // Gives the value as string
            }
        }
        

        【讨论】:

          【解决方案5】:
          $cell = $excel->getActiveSheet()->getCell('B' . $i);
          $InvDate= $cell->getValue();
          $InvDate= PHPExcel_Shared_Date::ExcelToPHPObject($InvDate)->format('Y-m-d H:i:s');
          

          试试这个

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-08
            • 2017-04-21
            • 1970-01-01
            • 1970-01-01
            • 2018-07-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多