PHPExcel日期字段与源电子表格不匹配

时间:2011-04-14 01:14:29

标签: php phpexcel

这是我的电子表格中的内容:

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库还不是很熟悉。

2 个答案:

答案 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')