使用PHP将Excel日期编号转换为Unix时间戳时不匹配

时间:2012-09-04 01:59:11

标签: php date timezone phpexcel

嗨〜我正在使用 PHPExcel 1.7.7 来读取XLSX文件并在网页中显示结果。

我正在尝试获取存储日期和时间的单元格的值。时间字符串并使用以下代码在PHP中处理它。

<?php

date_default_timezone_set('Australia/Canberra'); 

$value = $objPHPExcel->getActiveSheet()->getCell('A1')->getValue();

define('MIN_DATES_DIFF', 25569);
define('SEC_IN_DAY', 86400);

function excel2Timestamp($excelDate)
{
  if($excelDate <= MIN_DATES_DIFF)  
  {
     return 0;
  }

  return ($excelDate - MIN_DATES_DIFF) * SEC_IN_DAY;
}

echo $result = date('H:i:s d/m/Y', excel2Timestamp($value)); 

?>

虽然单元格中的原始值是“00:00:00 01/07/2012”,而不是给我正确的结果,上面的PHP代码的输出显示“10:00:00 01/07 / 2012" 。

它似乎是由时区差异引起的,但我已经在代码的开头定义了时区。不知道它有什么问题。

有人可以帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

忘记你的函数转换为时间戳(我也是这样做的)... PHPExcel会自动执行转换,所以试试这样做:

//get the excel date value (if it's stored in the A1 cell)
$excelDate = $objPHPExcel->getActiveSheet()->getCell('A1')->getValue();
//converts from excel format to a datetime object
$date = PHPExcel_Shared_Date::ExcelToPHPObject($excelDate);
//format the date as you want.
$formatedDate = $date->format('m/d/Y');

它应该有用。