我正在尝试使用这个类来导入大量数据。大多数数据都是正确读取的,但是我有两个日期列,这给我带来了问题。
日期的格式为DD/MM/YYYY,返回的值比电子表格中的值提前一天。例如,04/03/2011变为05/03/2011
我尝试过像这样访问数据:
$data->sheets[$sheet]['cells'][$row][$col];我还尝试使用原始数据:
$data->sheets[$sheet]['cellsInfo'][$row][$col]['raw']它以unix时间戳的形式返回日期,但是仍然比它应该返回的日期早了一天。
有没有什么办法可以强制类将列的值作为一个简单的字符串返回?
任何建议都很感谢。
谢谢。
发布于 2011-03-07 19:23:10
Spreadsheet_Excel_Reader使用标准PHP date()函数将Excel数字日期/时间戳转换为PHP日期字符串。在Excel中作为日期/时间戳保存的数值实际上是UTC,因此这可能是一个时区问题。在导入工作簿之前,尝试在PHP脚本中向UTC发出date_default_timezone_set()。
发布于 2011-07-08 17:30:34
我也有同样的问题,我用一个小函数来解决它。
$zone=dateadde("d",-1,$cell);
其中:[# 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;
}]
如此糟糕的编辑器!!
发布于 2011-03-07 19:29:34
我认为文件中的日期不是Excel日期格式。有可能吗?
你能得到类似字符串的字段,然后将另一个字符串格式化为MM/DD/YYYY格式,并使用strtotime函数吗?
https://stackoverflow.com/questions/5218983
复制相似问题