【问题标题】:PHP Date reading problem, I got a Number not a DatePHP 日期读取问题,我得到的是数字而不是日期
【发布时间】:2020-03-26 17:59:29
【问题描述】:

我想从 Excel 文件中读取日期,但是当我打印时 屏幕上的日期我只能看到一个数字而不是 日期,为什么?

Excel 文件:

结果:

【问题讨论】:

  • 向我们展示相关代码,以便我们为您提供帮助 - 阅读how to ask
  • 这很可能是因为所读取文件的格式。您可能想尝试不同的文件扩展名,例如 csv。
  • 请阅读How to Askminimal reproducible example,然后相应地编辑您的问题。如果没有您首先向我们展示您所做的事情,我们很难告诉您您可能做错了什么。
  • 我只是使用 'phpoffice' github 存储库从 excel 中读取数据,并且仅将 print_r($data) 用于屏幕。但是现在除非与您分享我的代码,因为第二个 cmets 解决了问题。我将excel保存为另一种格式(csv),我得到了一个日期而不是一个数字。感谢您的帮助。

标签: php excel date


【解决方案1】:

请使用此公式从 Excel 日期更改为 Unix 日期,然后您可以使用 "gmdate" 获取 PHP 中的真实日期:
UNIX_DATE = (EXCEL_DATE - 25569) * 86400
并将 Unix 日期转换为 Excel 日期,请使用以下公式: EXCEL_DATE = 25569 + (UNIX_DATE / 86400)
将此公式放入变量后,您可以使用以下示例在 PHP 中获取实际日期:
$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400; echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
86400 是一天中的秒数 = 24 * 60 * 60。25569 是从 1900 年 1 月 1 日到 1970 年 1 月 1 日的天数。Excel 基准日期是 1900 年 1 月 1 日,Unix 是 1970 年 1 月 1 日。 UNIX 日期值从 1970 年 1 月 1 日(1969 年 12 月 31 日午夜)开始以秒为单位。因此,要从 excel 转换,您必须减去天数,然后转换为秒

【讨论】:

    【解决方案2】:

    Excel 将日期视为数字,数字表示 1899 年 12 月 31 日之后的天数。因此,第 1 天是 1900 年 1 月 1 日,第 43102 天是 2018 年 1 月 3 日。但是等等……您的数据显示的是 2018 年 1 月 2 日!事实证明,微软认为 1900 年是闰年,因此第 60 天是 1900 年 2 月 29 日,而在现实世界中实际上是 3 月 1 日。无论如何,这意味着对于 1900 年 2 月 28 日之后的日期,你需要减去一个从天数得到正确的日期。因此,要将 Excel 日期数转换为 PHP 中的日期,请使用以下代码:

    $dayval = 43102;    // you would read from your file here
    $date = new DateTime('1899-12-31');
    $date->modify("+$dayval day -1 day");
    echo $date->format('Y-m-d');
    

    输出:

    2018-01-02
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多