5

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

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

几个问题 :

  • 这是可以修复的吗?
  • 是否可以利用 41397 ?它是已知的日期格式吗?
  • 是否有另一个 xsl 到 php 脚本可以在无需更改任何内容的情况下工作?
4

2 回答 2

14

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

Excel 将日期和时间存储为一个数字,表示自 1900 年 1 月 0 日以来的天数,加上 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 如何存储日期的更多信息(不是像 msdn 这样的真实参考)

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

于 2013-07-23T11:59:12.253 回答
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'); ?>

于 2015-12-04T10:54:29.197 回答