这是我的电子表格中的内容:
12/04/2011 8:56:17 p.m. (xls dateserial = 40645.87242)
这是我用来提取日期并在PHP中转换为日期字符串的代码:
$txn_date_xls = $sheet->getCell("H$row")->getValue();
echo "Txn Date (original): $txn_date_xls<br />";
$txn_date = PHPExcel_Shared_Date::ExcelToPHP($txn_date_xls);
echo "Txn Date: ".date('Y-m-d H:i:s', $txn_date)."<br />";
这是我脚本的输出:
Txn Date (original): 40644.55783637732
Txn Date: 2011-04-11 13:23:17
日期序列与原始电子表格不匹配。 所以,我正在尝试确定这是否是PHPExcel的错误,或者我错过了设置或其他东西,我需要在从单元格中提取dateserial之前做。可能是时区问题?
抱歉,我对PHPExcel库还不是很熟悉。
答案 0 :(得分:10)
我对此不太确定但是......
PHP中的函数date()取决于服务器的时区设置。
PHPExcel_Shared_Date :: ExcelToPHP()假设提供的日期是GMT并相应地返回Unix时间。
因此,尝试在脚本开头为PHP时区设置GMT / UTC(使用date_default_timezone_set())
date_default_timezone_set('UTC');
或像这样(使用ini_set())
ini_set('date.timezone', 'UTC');
此外,请尝试使用gmdate()代替date(),否则您可能会获得1天的偏移。
可用链接:
答案 1 :(得分:2)
定义
date_default_timezone_set(YOUR_TIME_ZONE);
更改此行:
date('Y-m-d H:i:s', $txn_date)
为:
PHPExcel_Style_NumberFormat::toFormattedString($txn_date_xls, 'Y-m-d H:i:s')