如何使用 phpexcel 和代码点火器将此 excel 数据序列值转换41225
回日期格式?12-Nov-2012
我尝试了以下方法,但没有奏效。
$G74 = $objPHPExcel->getActiveSheet()->getCell('B6')->getValue();
如何使用 phpexcel 和代码点火器将此 excel 数据序列值转换41225
回日期格式?12-Nov-2012
我尝试了以下方法,但没有奏效。
$G74 = $objPHPExcel->getActiveSheet()->getCell('B6')->getValue();
Excel 中的日期存储为自 1900 年 1 月 1 日以来的天数,但由于 1900 年不是闰年而存在一个错误。因此,您可以使用此 hack 创建一个 DateTime 对象(从 1900 年 3 月 1 日开始的日期有效):
$n = 41225;
$dateTime = new DateTime("1899-12-30 + $n days");
您可以使用以下内容格式化 DateTime 对象:
echo $dateTime->format("d M Y");
如果要包括时间和日期,请在转换之前乘以 86400(一天中的秒数)以获得自 1900 年 1 月 1 日以来的秒数:
$n = 42898.35416666;
$dateTime = new DateTime("1899-12-30 + ". round($n * 86400) . " seconds");
如果单元格具有将其格式化为日期的格式掩码,则使用 getFormattedValue() 方法而不是 getValue() 可能会有所帮助。getValue() 返回一个原始值,它(在本例中)是 Excel 序列号。
否则,PHPExcel_Shared_Date 类中的 ExcelToPHP() 或 ExcelToPHPObject() 方法应该完成返回 unix 时间戳或 PHP DateTime 对象的工作,然后您可以根据需要对其进行格式化
我必须以十进制格式转换日期序列号,即:42898.35416666,并且 DateTime 对象不采用小数。
基于 rjmunro 的回答和 animuson 的关于如何将小数转换为小时和分钟的回答,这里是十进制Excel 日期的解决方案。
function dateSerialToDateTime($dateserial) {
$arrDate = explode(".", $dateserial);
$n = $arrDate[0];
$decimal = "." . $arrDate[1]; //decimal amount of seconds
$duration = 86400 * $decimal; //number of seconds in a day * decimal
$dateTime = new DateTime("1899-12-30 + $n days");
$converted = $dateTime->format("Y-m-d") . " " . gmdate("H:i:s", $duration);
return $converted;
}
$dateserial = 42898.35416666;
die(dateSerialToDateTime($dateserial));
//returns 2017-06-12 08:29:59