Я пытаюсь отформатировать временную ячейку с использованием PHPSpreadsheet, но, похоже, она также включает дату при просмотре строки формул. Кажется также, что есть некоторые несоответствия при преобразовании из строки, объекта даты или времени unix.
<?php
include '../vendor/autoload.php';
use \PhpOffice\PhpSpreadsheet\Spreadsheet;
use \PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$times = [
'16:00:00',
new \DateTime('16:00:00'),
\strtotime('16:00:00'),
'2020-04-04 16:00:00',
new \DateTime('2020-02-04 16:00:00'),
\strtotime('2020-02-04 16:00:00'),
];
$format = \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_TIME1;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
foreach ($times as $i => $time) {
$sheet->setCellValue('A' . ($i+1), \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($time));
$sheet->getStyle('A' . ($i+1))->getNumberFormat()->setFormatCode($format);
}
$writer = new Xlsx($spreadsheet);
$writer->save('test.xlsx');
Из \PHPOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_TIME1
: const FORMAT_DATE_TIME1 = 'h:mm AM/PM';
Это ошибка или предназначена функциональность? Учитывая, что const FORMAT_DATE_DATETIME = 'd/m/yy h:mm';
включает некоторые параметры даты, я думаю, что что-то не так происходит.
Вот несколько скриншотов того, что происходит:
Но если мы введем «5:00 AM» в ячейку, строка формулы не будет содержать дату:
Вот экран, который появляется при щелчке правой кнопкой мыши> «Форматировать ячейку»:
Может кто-нибудь сказать мне, если я что-то делаю неправильно, спасибо.