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函数?