tim*_*der 13 php import-from-excel
我已经看到很多引用转换Excel序列日期格式的"日期"部分,但每个人似乎都跳过它的"时间"部分.
这是我需要做的:
我有一个我正在导入的Excel文件.PHP正在使用中.
我遇到了Excel Date Serial格式(dddddd.tttttt),需要将其转换为整个Unix时间戳.
我已经尝试了一些不同的东西,但是我开始讨论如何以流畅的方式做到这一点.
小智 40
请使用此公式从Excel日期更改为Unix日期,然后您可以使用"gmdate"来获取PHP中的实际日期:
UNIX_DATE = (EXCEL_DATE - 25569) * 86400
Run Code Online (Sandbox Code Playgroud)
要从Unix日期转换为Excel日期,请使用以下公式:
EXCEL_DATE = 25569 + (UNIX_DATE / 86400)
Run Code Online (Sandbox Code Playgroud)
将此公式转换为变量后,您可以使用此示例在PHP中获取实际日期:
$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
Run Code Online (Sandbox Code Playgroud)
谢谢.
Elz*_*ugi 13
这个oneliner为我工作,当然使用PHPExcel.
$date_formated = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($date_int_val));
Run Code Online (Sandbox Code Playgroud)
你显然没有看起来很难:
直接从PHPExcel日期处理代码中获取:
public static function ExcelToPHP($dateValue = 0) {
if (self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900) {
$myExcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) {
--$myExcelBaseDate;
}
} else {
$myExcelBaseDate = 24107;
}
// Perform conversion
if ($dateValue >= 1) {
$utcDays = $dateValue - $myExcelBaseDate;
$returnValue = round($utcDays * 86400);
if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) {
$returnValue = (integer) $returnValue;
}
} else {
$hours = round($dateValue * 24);
$mins = round($dateValue * 1440) - round($hours * 60);
$secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60);
$returnValue = (integer) gmmktime($hours, $mins, $secs);
}
// Return
return $returnValue;
} // function ExcelToPHP()
Run Code Online (Sandbox Code Playgroud)
根据需要设置self :: $ ExcelBaseDate == self :: CALENDAR_WINDOWS_1900以指示您正在使用的Excel基本日历:Windows 1900或Mac 1904
如果你想要一个PHP DateTime对象:
public static function ExcelToPHPObject($dateValue = 0) {
$dateTime = self::ExcelToPHP($dateValue);
$days = floor($dateTime / 86400);
$time = round((($dateTime / 86400) - $days) * 86400);
$hours = round($time / 3600);
$minutes = round($time / 60) - ($hours * 60);
$seconds = round($time) - ($hours * 3600) - ($minutes * 60);
$dateObj = date_create('1-Jan-1970+'.$days.' days');
$dateObj->setTime($hours,$minutes,$seconds);
return $dateObj;
} // function ExcelToPHPObject()
Run Code Online (Sandbox Code Playgroud)