PhpSpreadsheet Date::PHPToExcel() 添加时间

PhpSpreadsheet Date::PHPToExcel() adding time

我正在尝试添加没有时间部分的 date field into an Excel file

这是我当前的代码:

$dt = !empty($date) ? Date::PHPToExcel(DateTime::createFromFormat('Y-m-d', $date)) : null;
$spreadsheet->getActiveSheet()->setCellValue("A1", $dt);
$spreadsheet->getActiveSheet()->getStyle("A1")->getNumberFormat()->setFormatCode('yyyy-mmm-dd');

时间以某种方式添加到日期中,虽然它在打印的内容上不可见,但当您单击单元格时,它也包含时间部分。我只想要日期,如何防止这种情况发生?

我也试过:

$dt = !empty($date) ? $date : null;
$spreadsheet->getActiveSheet()->setCellValue("A1", $dt);
$spreadsheet->getActiveSheet()->getStyle("A1")->getNumberFormat()->setFormatCode('yyyy-mmm-dd');

但是这个显示 YYYY-MM-DD 即使我将数字格式设置为 YYYY-MMM-DD

显然 DateTime::createFromFormat() 如果您不指定,则添加当前时间。

解决方案是在格式中添加 ! 以将所有字段重置为我从 this comment.

获得的 zero-like 值
$dt = !empty($date) ? Date::PHPToExcel(DateTime::createFromFormat('!Y-m-d', $date)) : null;
$spreadsheet->getActiveSheet()->setCellValue("A1", $dt);
$spreadsheet->getActiveSheet()->getStyle("A1")->getNumberFormat()->setFormatCode('yyyy-mmm-dd');