【问题标题】:My excel date is converted into text in php我的 excel 日期在 php 中转换为文本
【发布时间】:2016-09-17 17:50:03
【问题描述】:

我的 excel 将开始日期作为标题,值为 05/30/16 但当我在 php 中读取此值时,它显示的是“MayMay/MonMon/20162016”。为什么会这样。我想要真正的价值。

$excel = new Spreadsheet_Excel_Reader();
$excel->read('sample.xls');
$x=1;
while($x<=$excel->sheets[0]['numRows']) {
  echo "\t<tr>\n";
  $y=1;
  while($y<=$excel->sheets[0]['numCols']) {
    $cell = isset($excel->sheets[0]['cells'][$x][$y]) ? $excel->sheets[0]['cells'][$x][$y] : '';
    echo "\t\t<td>$cell</td>\n"; 
    $y++;
  } 
  echo "\t</tr>\n";
  $x++;
}

【问题讨论】:

  • 你是如何用 PHP 阅读这篇文章的?确实提供了信息。
  • 别告诉我!让我猜猜!....您在 PHP 日期函数中使用了类似 MM/DD/YY 的 Excel 日期格式掩码...。PHP 日期掩码与 Excel 日期掩码不相同。 ...阅读PHP Docs for date formats
  • 我的excel日期格式是MM/DD/YY;
  • 那么你从哪里得到这个 Spreadsheet_Excel_Reader() 的副本,它看起来好像有点坏了
  • date 检查此网址。 D 代表星期几。不是date。使用d-m-Y 而不是MM\DD\YY

标签: php excel date xls


【解决方案1】:

要获取日期,请使用

$cell = isset($excel->sheets[0]['cells'][$x][$y])
    ? $excel->sheets[0]['cells'][$x][$y]['raw']
    : '';

这将返回“原始”的 MS Excel 序列化时间戳值,一个类似于 41944 的数字。

MS Excel 时间戳通常是自 1900 年 1 月 1 日以来的天数(如果使用 Mac 1904 日历创建电子表格,它可能是自 1904 年 1 月 1 日以来的天数)

您需要将其转换为 Unix Timestamp 才能使用 PHP 日期函数....取决于正在使用的日历,这是一个快速而肮脏的转换:

Windows 1900 日历

$unixTimestamp = ($excelTimestamp - 25569) * 86400;

反过来

$excelTimestamp = ($unixTimestamp / 86400) + 25569;

Mac 1904 日历

$unixTimestamp = ($excelTimestamp - 24107) * 86400;

反过来

$excelTimestamp =  ($unixTimestamp / 86400) + 24107;

所以 MS Excel 41944 => $unixTimestamp = (41944 - 25569) * 86400; 给出 1414800000 这是 1st November 2014 的 unix 时间戳

一旦你有了一个 unix 时间戳,你就可以使用 PHP 的标准 date() 函数或 DateTime 对象来随意操作和格式化它

echo date('d-M-Y', $unixTimestamp);

【讨论】:

  • 问题是 $cell 已经返回 MayMay/MonMon/20162016。
  • 那么如果你不能访问原始值,你需要修复库本身的错误
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
相关资源
最近更新 更多