PHP Spreadsheet_Excel_Reader - 阅读日期

时间:2011-03-07 11:14:51

标签: php excel

我正在尝试使用此类导入大量数据。 大多数数据都被正确读取,但是我有两个日期列给我带来了问题。

日期的格式为DD / MM / YYYY,返回的值比电子表格中的日期提前一天。例如,04/03/2011成为05/03/2011

我尝试过访问这样的数据:

$data->sheets[$sheet]['cells'][$row][$col];

我也尝试过使用原始数据:

$data->sheets[$sheet]['cellsInfo'][$row][$col]['raw']

将日期作为unix时间戳返回,但仍然比它应该提前一天。

无论如何我可以强制类将列的值作为简单字符串返回吗?

任何建议表示赞赏。

感谢。

3 个答案:

答案 0 :(得分:2)

Spreadsheet_Excel_Reader使用标准PHP date()函数将Excel数字日期/时间戳转换为PHP日期字符串。在Excel中作为日期/时间戳保存的数值实际上是UTC,因此这可能是时区问题。尝试在导入工作簿之前在PHP脚本中向UTC发出date_default_timezone_set()

答案 1 :(得分:2)

我有同样的问题,我用一点功能来解决它​​......

$区= dateadde( “d”, - 1,$细胞);

其中: [  #enter date = 23/08/2011

 function dateadde($interval, $number, $date) 
 {
    $jour=substr("$date", 0, 2);
    $mois=substr("$date", 3, 2);
    $annee=substr("$date", 6, 4);
    $adate = mktime(0,0,0,$mois,$jour,$annee);

    $date_time_array = getdate($adate);
    $hours = $date_time_array['hours'];
    $minutes = $date_time_array['minutes'];
    $seconds = $date_time_array['seconds'];
    $month = $date_time_array['mon'];
    $day = $date_time_array['mday'];
    $year = $date_time_array['year'];
    switch ($interval) 
    {
        case 'yyyy':
            $year+=$number;
            break;
        case 'q':
            $year+=($number*3);
            break;
        case 'm':
            $month+=$number;
            break;
        case 'y':
        case 'd':
        case 'w':
            $day+=$number;
            break;
        case 'ww':
            $day+=($number*7);
            break;  
    }
    $timestamp= mktime(0,0,0,$month,$day,$year);
    $jourascii=strftime("%d/%m/%Y",$timestamp);
    return $jourascii;
 }

糟糕的编辑!!

答案 2 :(得分:0)

我认为文件中的日期不是Excel日期格式。这是可能的吗?

你能得到像字符串一样的字段,然后用MM / DD / YYYY格式格式化另一个字符串并使用strtotime函数吗?