在php中阅读xls日期

时间:2013-07-23 11:20:20

标签: php date phpexcel

我正在使用php-excel-reader在我的php脚本中读取XLS文件,除了阅读日期外,一切正常。它只返回一个未定义的对象。

  • XLS文件不在我的电脑上制作,我不知道与女巫 版本已创建。
  • 如果我在计算机上打开文件并再次保存,一切正常。 (但我显然宁愿避免这样做)
  • 在php-excel-reader脚本中进行了一些挖掘之后,我设法获得了它从XLS中提取的值。例如,41397而不是03/05/2013(d / m / y)

几个问题:

  • 这可以解决吗?
  • 是否有可能利用41397?它是一种已知的日期格式吗?
  • 是否还有另一个xsl到php脚本,无需更改任何内容即可使用?

2 个答案:

答案 0 :(得分:14)

根据excel格式41397 is 2013-05-03

  

Excel将日期和时间存储为表示数字的数字   自1900年1月1日以来的几天,加上24小时工作日的一小部分:
  ddddd.tttttt。这称为序列日期或序列日期时间。

您可以使用以下代码将号码转换为有效日期

function excelDateToDate($readDate){
    $phpexcepDate = $readDate-25569; //to offset to Unix epoch
    return strtotime("+$phpexcepDate days", mktime(0,0,0,1,1,1970));
}

php-excel-reader应该这样做,但不知道它为什么不这样做。

您可以获得有关excel如何存储日期here的更多信息(不是像msdn这样的真实参考)

编辑: 检查PHPExcel,看起来像静态函数PHPExcel_Shared_Date::ExcelToPHP($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL)这样做。

答案 1 :(得分:1)

一种简单的方法......

<?php $date = date_create('30-12-1899'); date_add($date, date_interval_create_from_date_string('41397 days')); echo date_format($date, 'Y-m-d'); ?>