2011-04-14 82 views
2

这是在我的电子表格: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库。

回答

10

我不太确定这一点,但...

功能date()在PHP取决于服务器的时区设置。

PHPExcel_Shared_Date :: ExcelToPHP()假定提供的日期是格林尼治标准时间并相应地返回Unix时间。

所以尝试(使用date_default_timezone_set()

date_default_timezone_set('UTC'); 

或像这样(使用ini_set()

ini_set('date.timezone', 'UTC'); 

此外,在脚本的开头来设置PHP时区GMT/UTC,请尝试使用gmdate()代替date(),否则您可能会得到1天抵消

可用链接:

+0

使用gmdate()确实有所帮助,但并未解决问题。 – bumperbox 2011-04-14 02:13:01

+0

我保存了与xlsx文件相同的文件并将其导入(并使用了gmdate),它工作。所以也许它与文件格式有关? – bumperbox 2011-04-14 02:13:48

+0

@ Wh1T3h4Ck5 - 如果有人告诉我虫子,那么我可能会解决它们......大部分我听到的都是“它不工作”。但是你是对的,PHPExcel将所有的Excel日期序列视为UTC时间戳。我不知道在.xls BIFF格式中有任何值可以识别时区偏移(只是Windows 1900/Mac 1904日历切换),而随后使用date()函数将返回的unix时间戳值到显示格式将调整为默认时区。 – 2011-04-14 08:38:54

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') 
相关问题