没有破折号、斜杠或其他的 PHPExcel 日期

PHPExcel date without dash, slash or else

我使用 excel 模板,L 列中的单元格格式为 "custom" -> ddmmyyyy
从 php 页面调用 PHPExcel 对象并填写如下:

$objPHPExcel->setActiveSheetIndex(0)
->setCellValueExplicit('L'.$i, $birthdate, PHPExcel_Cell_DataType::TYPE_STRING);

(在一个循环中,但这对问题并不重要)。
值 $birthdate 包含带破折号的日期。这正是我想要的……几乎……=>
写入单元格并打开 excel 文件后,我看到所有日期都是 以这种
格式显示:dd-mm-yyyy 但是,该文件中 L 列中每个单元格的单元格格式
仍然是 "custom" -> ddmmyyyy 所以我希望这些单元格显示为 ddmmyyyy...

为什么单元格格式是 ddmmyyyy 但它仍然显示破折号?

此外...当我单击值栏中的日期后面(fx 后面的那个字段)时,
然后按 ENTER,然后突然间,单元格显示日期为 ddmmyyyy。 ..
为什么不打开文件?以及如何解决?

因为您没有将日期存储为 Excel 日期时间戳,而是存储为字符串。

要在 MS Excel 中存储日期,您需要存储示例中所示的序列化时间戳值

如图/Examples/02types.php

$dateTimeNow = time();
$objPHPExcel->getActiveSheet()
    ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeNow));

PHPExcel_Shared_Date::PHPToExcel() 会将 unix 时间戳、PHP DateTime 对象或大多数 strtotime() 可以处理的字符串格式日期值转换为 MS Excel序列化时间戳

编辑

您可能需要对 ddmmyyyy 格式进行一些操作,使其成为可以轻松转换为 DateTime 对象的格式:

$dateTimeValue = DateTime::createFromFormat('dMY', '18082015', new DateTimeZone('UTC'));
$objPHPExcel->getActiveSheet()
    ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeValue));

意外找到解决方案...将日期设置为 00:00:00 UTC =>

$date = DateTime::createFromFormat('d-m-Y', $birthdate);
$birthdate  = $date->format('d-m-Y')." 00:00:00";
date_default_timezone_set("UTC");
$timestamp = strtotime($birthdate);
$dateValue = $timestamp;

    $objPHPExcel->getActiveSheet(0)
        ->setCellValue('L'.$i, PHPExcel_Shared_Date::PHPToExcel($dateValue));