今天要做數據導入:把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