【问题标题】:Phpspreadsheet - Time cell retrieved as floatPhpspreadsheet - 时间单元格检索为浮点数
【发布时间】:2018-08-15 00:00:14
【问题描述】:

我有一个带有时间输入的 excel 文件。

  Mar 01, 2018  | Thursday  | 8:00 AM | 5:00 PM
  Mar 02, 2018  | Friday    | 8:00 AM | 5:00 PM

但是当我的代码尝试读取这些单元格时,输出变为浮点数(例如 8:00 AM 变为 0.33333333333333)。这是我的代码

$date = $sheet->getCell("A".$row)->getValue();
$time_in = $sheet->getCell("C".$row)->getValue();
$time_out = $sheet->getCell("D".$row)->getValue();

echo "date: ".$date.          //Mar 01, 2018
     " time_in: ".$time_in.   //becomes 0.333333333333333
     " time_out: ".$time_out; //becomes 0.708333333333333

如何在不改变 phpspreadsheet 值的情况下按原样输出?我尝试查看 phpspreadsheet 文档,但没有找到解决方案。

【问题讨论】:

    标签: php excel phpexcel phpspreadsheet


    【解决方案1】:

    在读取数据之前对其进行格式化。

    例如:

    单元格数据2020/10/13 19:00:00

    直接访问会得到44117.791666667

    $sheet->toArray();
    

    访问前格式化会得到2020-10-13 19:00:00

    $row_num = $sheet->getHighestDataRow();
    $sheet->getStyle("H1:H$row_num")->applyFromArray(array("numberFormat"=>array("formatCode"=>'yyyy-mm-dd hh:mm:ss'))); // H is the datatime row
    $sheet->toArray();
    

    【讨论】:

      【解决方案2】:

      谢天谢地,我刚刚找到了答案。

      $in = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($time_in);
      echo gmdate("g:i a", $in);
      

      希望这对其他人有用。

      【讨论】:

      • 我建议使用 gmdate("g:i a", $in) 代替 date,这样它就不会休息一天。例如,如果您的系统设置为 EST 日期将使用 -5 转换日期/时间。前 2019 年 4 月 19 日凌晨 1 点将变为 2019 年 4 月 18 日晚上 8 点
      猜你喜欢
      • 2019-02-03
      • 2018-09-28
      • 2017-11-02
      • 2013-11-11
      • 2023-03-19
      • 2023-02-07
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多