2

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

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 的错误,或者我错过了设置或其他内容,我需要在从单元格中提取日期序列之前执行此操作。可能是时区问题?

抱歉,我对 PHPExcel 库还不是很熟悉。

4

2 回答 2

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 天的偏移量

可用链接:

于 2011-04-14T01:57:46.693 回答
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')
于 2015-01-30T08:16:44.630 回答