将完整Excel日期串行格式转换为Unix时间戳

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)

谢谢.

  • 就像魅力函数ExcelDateToUnix($ dateValue = 0){return($ dateValue-25569)* 86400; }` (2认同)

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现已弃用.它的直接继承者PhpSpreadsheet允许我们使用以下方法:`\ PhpOffice\PhpSpreadsheet\Shared\Date :: excelToDateTimeObject($ date_int_val)`. (4认同)

Mar*_*ker 6

你显然没有看起来很难:

直接从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)