【问题标题】:Spreadsheet_excel_reader date format [duplicate]Spreadsheet_excel_reader 日期格式[重复]
【发布时间】:2015-01-27 09:37:22
【问题描述】:

我正在使用电子表格阅读器读取 php 上的 xls 文件并将数据插入到 oracle 数据库中。我正在使用以下代码:

$filename = 'test.xls';
$reader=new Spreadsheet_Excel_Reader();
$reader->setUTFEncoder('iconv');
$reader->setOutputEncoding('CP1251');
$reader->read($filename);

for($r=1; $r<=$reader->sheets[0]['numRows']; $r++)
{
   for($c=1; $c<=$reader->sheets[0]['numCols']; $c++)
   {
      if (isset($reader->sheets[0]['cells'][$r][$c])) 
      {
         //I'm using this code to get the value
         echo $reader->sheets[0]['cells'][$r][$c];
      }
   }
}

我的问题是,当我尝试读取日期值时,不是显示“01/11/2014”,而是显示“41944”。谁能帮帮我?

【问题讨论】:

    标签: php excel date


    【解决方案1】:

    您正在读取的值实际上是 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);
    

    【讨论】:

    • 如何使用 PHP 电子表格检查值是否有日期?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2012-09-08
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多