没有破折号、斜杠或其他的 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));
我使用 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));