PHP的Spreadsheet_Excel_Reader – 阅读date

我试图用这个类来导入大量的数据。 大部分数据正在被正确读取,但是我有两个date列给我的问题。

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

我试图访问这样的数据:

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

我也尝试使用原始数据:

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

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

有没有反正我可以强制类返回列的值作为一个简单的string?

任何意见赞赏。

谢谢。

Spreadsheet_Excel_Reader使用标准的PHP date()函数将Excel数字date/时间戳记转换为PHPdatestring。 在Excel中保存为date/时间戳的数值实际上是UTC,所以这可能是一个时区问题。 在导入工作簿之前,尝试在PHP脚本中发出date_default_timezone_set()到UTC。

我有同样的问题,我用一个小function解决它…

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

其中:[#inputdate= 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; } 

]

这么糟糕的编辑!

我认为文件中的date不是Exceldate格式。 这是可能的?

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