php讀取excel中的時間轉換問題

今天要做數據導入:把2012-5-10 16:00:00 讀入到php中後變成了41039.666666667 
這種Excel列的單元格格式爲日期單元格式,如果是文本格式則會得到我們想要的原樣的字符串類型。

轉換方法一:

$t = 41807; //讀取到的值
$n = intval(($t - 25569) * 3600 * 24); //轉換成1970年以來的秒數 轉換完成就是Excel時間的時間戳
echo gmdate('Y-m-d H:i:s',$n);//格式化時間,不是用date哦, 時區相差8小時的

轉換方法二:

//$date讀取到的值
    function excelTime($date, $time = false) {
        if(function_exists('GregorianToJD')){
            if (is_numeric( $date )) {
                $jd = GregorianToJD( 1, 1, 1970 );
                $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 );
                $date = explode( '/', $gregorian );
                $date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT )
                    ."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT )
                    ."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT )
                    . ($time ? " 00:00:00" : '');
                return $date_str;
            }
        }else{
            $date=$date>25568?$date+1:25569;
            /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/
            $ofs=(70 * 365 + 17+2) * 86400;
            $date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : '');
        }
        return $date;
    }

轉換方法三:

PHPExcel_Shared_Date::ExcelToPHP(“要轉換的時間”) 
我按照這個方案處理的,思前想後覺得完全依靠運營自由發揮,萬一有時候單元格式不是時間格式,而我依舊按照時間格式處理的話,就會出現問題,所以我先判斷了下Excel讀到的數據是不是2008-12-11格式或者是不是2008/12/11這樣的數據,如果是則不做處理,如果不是則按照方案三進行
function excelTime($date, $time = false) {
    //如果是數字則轉化,如果是有 - 或者 /,視作文本格式不作處理
    $type1 = strpos($date, '/');
    $type2 = strpos($date, '-');
    if($type1 || $type2){
        $return_date = $date;
    }else{
        $return_date=date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($date));
    }
    return $return_date;
}

轉自:https://blog.csdn.net/qq_31617637/article/details/80513972

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章