【问题标题】:reading xls date in php在 php 中读取 xls 日期
【发布时间】:2013-07-23 11:20:20
【问题描述】:

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

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

几个问题:

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

【问题讨论】:

  • 这是由错误的单元格格式引起的。尝试在 Excel 中以日期格式创建日期。然后将单元格格式更改为数字,您会看到类似 41397 的内容。
  • 这是我虽然是的,但我需要让它工作,而不必手动更改单元格格式和所有内容。
  • 要么使用可以处理 Excel 和 PHP 之间日期转换的库,例如 PHPExcel - 您已标记此 PHPExcel,但实际上并未使用 PHPExcel;或stackoverflow.com/questions/11172644/…

标签: php date phpexcel


【解决方案1】:

根据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 如何存储日期 here 的更多信息(不是像 msdn 这样的真实参考)

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

【讨论】:

  • 谢谢,我自己尝试将其转换为有效日期,但我不知道 -25569。
  • -25569 它从 1900-Jan-0 调整到 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)并且 excel 认为存在日期 1900-Feb-29
【解决方案2】:

一个简单的方法...

<?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'); ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多