如何使用phpexcel和代码点火器将此excel数据元值41225
转换回日期格式12-Nov-2012
?
我尝试了以下但是没有用。
$G74 = $objPHPExcel->getActiveSheet()->getCell('B6')->getValue();
答案 0 :(得分:10)
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");
如果您想要包括时间和日期,请在转换之前乘以80000(一天中的秒数)以获得自1900年1月1日以来的秒数:
$n = 42898.35416666;
$dateTime = new DateTime("1899-12-30 + ". round($n * 86400) . " seconds");
答案 1 :(得分:3)
如果单元格具有将其格式化为日期的格式掩码,则使用getFormattedValue()方法而不是getValue()可能会有所帮助。 getValue()返回一个原始值,在本例中是Excel序列号。
否则,PHPExcel_Shared_Date类中的ExcelToPHP()或ExcelToPHPObject()方法应该执行返回unix时间戳或PHP DateTime对象的工作,然后可以根据需要进行格式化
答案 2 :(得分:0)
我必须转换十进制格式的dateserial数字,即:42898.35416666,而DateTime对象不带小数。
根据rjmunro的回答和animuson对how to convert decimals to hours and minutes的回答,这里是十进制 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