我需要将日期保存到 Excel 文件,它必须以“dd/mm/yyyy”格式(或用户的本地日期格式)输出,并被视为日期,以便其中的一列可以正确排序。
这是代码:
<?php
include_once("../PHPExcel/Classes/PHPExcel.php");
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
$objPHPExcel = new PHPExcel();
$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
//I didn't find dd/mm/yyyy format, so I used yyyy-mm-dd
$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
$sheet->getStyleByColumnAndRow(0, 1)
->getNumberFormat()->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2
);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx");
它创建一个文件,但我看到的不是我的本地日期格式:“2014-10-16”,单元格的格式是“所有格式”->“yyyy-mm-dd”。我希望它能够以本地日期格式进行解析和输出。
我查看了源代码PHPExcel/Classes/PHPExcel/Style/NumberFormat.php
,发现了很多日期格式:
const FORMAT_DATE_YYYYMMDD2 = 'yyyy-mm-dd';
const FORMAT_DATE_YYYYMMDD = 'yy-mm-dd';
const FORMAT_DATE_DDMMYYYY = 'dd/mm/yy';
const FORMAT_DATE_DMYSLASH = 'd/m/y';
const FORMAT_DATE_DMYMINUS = 'd-m-y';
...
但我不知道该用什么。我怎样才能达到预期的目标?
$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
Sets a string单元格中的值,而不是日期。仅仅因为您将其解释为日期,并不意味着计算机程序会自动将其解释为日期。
查看 PHPExcel 中的日期示例文档 https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/08-Recipes.md#write-a-date-or-time-into-a-cell and Examples https://github.com/PHPOffice/PHPExcel/blob/1.8/Examples/02types.php#L94,您将看到需要将单元格值设置为 MS Excel 序列化时间戳(自 1900 年 1 月 1 日以来的天数浮点值)。您可以使用 PHPExcel 函数,例如PHPExcel_Shared_Date::PHPToExcel()
将人类日期/PHP DateTime 对象/Unix 时间戳转换为 MS Excel 序列化时间戳。
$sheet->setCellValueByColumnAndRow(0, 1, PHPExcel_Shared_Date::PHPToExcel( '2014-10-16' ));
将值存储为时间戳后,您可以将所需的任何日期格式掩码应用于该单元格以获得所需的格式
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)