Laravel Excel 导入日期变成五位数字的解决办法

解决方法有两种:

一、将excel中的日期列改成字符串类型即可,比如在前面加上'符号。


二、excel默认是从1900-01-01作为开始计算日期,而php默认是从1970-01-01 08:00:00 作为开始计算日期。两者之间相差70年, 共计25569(365*70 + 18(中间的润年天数) + 1)天, 所以用excel的数字减去25569得到天数再转换成php日期即可:

$date = date('Y-m-d', ($date - 25569) * 24 * 3600);

 或者写个函数

if (!function_exists('str_to_date')) {
    /**
     * (false|string) str_to_date_format : 将 "2017年7月10日" "2017.7.10" 转为标准的日期格式"2017-7-10"
     *
     * @param         $date
     * @param boolean $falseReturnNow 格式错误是否返回当前日期
     * @param string  $format
     *
     * @return false|string
     */
    function str_to_date_format($date, $falseReturnNow=true, $format='Y-m-d') {
        if (!$falseReturnNow && !$date) {
            return null;
        }
        // 接收的日期如果是数值型则用PHPExcel的内置方法转换成时间戳
        if (is_numeric($date)) {
            $timestamp = \PHPExcel_Shared_Date::ExcelToPHP($date);
            return date($format, $timestamp);
        }
        $date = str_replace(['号', '日'], '', $date);
        $date = str_replace(['年', '月', '.', '—', '——', '/', '-', '--'], '-', $date);
        // 如果时间格式错误,是否需要返回当前时间
        if (date($format, strtotime($date)) == '1970-01-01' && $falseReturnNow && DateTime::createFromFormat('Y-m-d G:i:s', $date) === FALSE) {
            return date($format);
        }
        return date($format, strtotime($date));
    }
}

  

posted @ 2023-04-11 14:08  星云惊蛰  阅读(608)  评论(0)    收藏  举报