【问题标题】:PHPExcel date without dash, slash or elsePHPExcel 日期不带破折号、斜线或其他
【发布时间】:2015-08-18 20:54:24
【问题描述】:

我在 L 列中使用带有单元格格式的 Excel 模板作为“自定义”-> ddmmyyyy
我从 php 页面调用 PHPExcel 对象并填写如下:

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

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

为什么 cellformat 是 ddmmyyyy 还是显示破折号?

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

【问题讨论】:

    标签: php date phpexcel


    【解决方案1】:

    因为您不是将日期存储为 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));
    

    【讨论】:

    • 我无话可说,马克....太好了!!!你刚刚拯救了我的一天! :-) 谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2022-12-19
      • 2023-03-18
      相关资源
      最近更新 更多