PHPExcel日期没有破折号,斜线或其他

时间:2015-08-18 20:54:25

标签: php date phpexcel

我在列L中使用带有单元格格式的Excel模板作为" custom" - > DDMMYYYY
从php页面我调用PHPExcel对象并填写如下:

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

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

为什么它仍然显示破折号虽然cellformat是ddmmyyyy?

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

2 个答案:

答案 0 :(得分:1)

因为您没有将日期存储为Excel DateTime标记,而是存储为字符串。

要在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));

答案 1 :(得分:0)

意外地找到了解决方案......将日期设置为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));