我正在尝试使用此类导入大量数据。 大多数数据都被正确读取,但是我有两个日期列给我带来了问题。
日期的格式为DD / MM / YYYY,返回的值比电子表格中的日期提前一天。例如,04/03/2011成为05/03/2011
我尝试过访问这样的数据:
$data->sheets[$sheet]['cells'][$row][$col];
我也尝试过使用原始数据:
$data->sheets[$sheet]['cellsInfo'][$row][$col]['raw']
将日期作为unix时间戳返回,但仍然比它应该提前一天。
无论如何我可以强制类将列的值作为简单字符串返回吗?
任何建议表示赞赏。
感谢。
答案 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函数吗?