PHPExcel检测单元格值是否格式化为日期

时间:2015-02-12 09:19:02

标签: php phpexcel phpexcelreader

大家好 我有一个问题,如何检测单元格值是否格式化到目前为止 当我上传日期值时,我使用此代码

$data = $objWorksheet->getCellByColumnAndRow($col, $row);

当一个单元格格式化为日期时,如果不是$data = 27474,则值为$data = 12/2/1983,然后我使用此代码格式化其日期

if(PHPExcel_Shared_Date::isDateTime($data)){
           $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
           $dateValue = PHPExcel_Shared_Date::ExcelToPHP($cellValue);                        
           $dob =  date('Y-m-d',$dateValue);    
    }                               

现在,问题是当$data在日期格式化时此代码没问题,但是当$data未形成时,值为$data = 2036-02-18这是错误的值

任何人都可以帮我解决这个问题,在此先感谢

3 个答案:

答案 0 :(得分:3)

请尝试这个,这应该可行,

if(PHPExcel_Shared_Date::isDateTime($data)){
   $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row);
   $InvDate= $cellValue->getValue();

   if(PHPExcel_Shared_Date::isDateTime($cell)) {
   $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
}  
}  

答案 1 :(得分:2)

感谢您的帮助,但事实证明这是我问题的解决方案:

$data = $objWorksheet->getCellByColumnAndRow($col, $row);   

if(!strtotime($data)) {
    if(PHPExcel_Shared_Date::isDateTime($data)) {
        $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
        $dateValue = PHPExcel_Shared_Date::ExcelToPHP($cellValue);                       
        $dateh     = date('Y-m-d',$dateValue);                          
    } else {                        
        $dateh  = "";                                                   
    } else {
        $st = strtotime($data);
        $dateh = date('Y-m-d',$st);                         

    }               
}

答案 2 :(得分:0)

并且因为我遇到了这个问题...我使用了strtotime方法,但是我通过mssql拉取数据进行处理,所以我就这样做了

if(!strtotime($r['effective_date'])) {
            $r['effective_date'] = \Carbon\Carbon::parse(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($r['effective_date']))->format('Y-m-d');
        }