javascript - 将 Excel 的 "41014"日期转换为 PHP 或 JavaScript 中的实际日期

标签 javascript php jquery mysql excel

我正在用 PHP/Jquery 编写一些东西,允许用户从 Excel 上传 Excel 电子表格。然后它获取该电子表格中的数据并将每个单元格的值分配给一个变量,但由于某种原因,我很难处理日期。 Excel 中的任何日期都以数字形式出现,例如 41014,而不是 04/15/2012(就好像我要在 Excel 中将格式设置为 text).

如何将其转换为 YYYY-MM-DD 格式,使其适合我正在使用的 mySQL 数据库的其余部分?我可以在 PHP 或 Jquery 中完成,但在 jQuery 中完成对我来说似乎更容易。

Excel 的单元格

04/15/2012

PHP 的echo json_encode($var);

`{dateReceived: 41014}`

jQuery 的 console.log(dateReceived);

41014

更新

我实际上无法得到这里提供的任何一个答案 - 我认为 php 答案最初有效,但由于某种原因我无法让它输出我需要的东西,但我发现了另一个简单的公式放入函数中。如果其他人正在寻找类似问题的答案,这就是我所做的:(其中 $dateValue 是 Excel 日期 41014 等...)

function convertDate($dateValue) {    

  $unixDate = ($dateValue - 25569) * 86400;
  return gmdate("Y-m-d", $unixDate);
  'where Y is YYYY, m is MM, and d is DD

}

最佳答案

直接取自 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()

根据需要设置 self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900 以指示您正在使用的 Excel 基准日历:Windows 1900 或 Mac 1904...最有可能是 1900

如果您想要一个 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()

关于javascript - 将 Excel 的 "41014"日期转换为 PHP 或 JavaScript 中的实际日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305688/

相关文章:

javascript - 如何从 jQuery 动态无延迟地加载 div 中的图像?

javascript - 使用 animate.css 和 jquery 的顺序动画

javascript - jQuery UI 可拖动快照还原不起作用

javascript - 如何在 javascript for 循环中呈现大块 html

php - 带有Quercus PHP的Grails 3

php - TCPDF - 将复选框设置为只读

php - Paypal 加密网站支付

javascript - 如何在显示之前通过 javascript/jquery 删除 html 元素

javascript - 我怎样才能让我的光滑 slider 像它应该的那样工作?

javascript - Service Worker 注册错误 : Unsupported MIME type ('text/html' )