您现在的位置是:网站首页>PHPPHP

Laravel PHP 中EXCEL导入浮点型的日期转成格式化本地日期和时间

左鹏03-16 09:57:40PHP95人已围观

简介解释:float类型时间其实是距离指定时间的天数,小数前是整数天所以是日期,小数后面的是当天又不满一整天所以时分秒。  /**  * EXCEL  中读取到的时间原型是 浮点型,现在要转成 格式化的标准时间格式  *        返回的时间是 UTC 时间(世界协调时间,加上8小时就是北京时

解释:float类型时间其实是距离指定时间的天数,小数前是整数天所以是日期,小数后面的是当天又不满一整天所以时分秒。

 
/**
 * EXCEL  中读取到的时间原型是 浮点型,现在要转成 格式化的标准时间格式
 *        返回的时间是 UTC 时间(世界协调时间,加上8小时就是北京时间)
 * @param float|int $dateValue Excel浮点型数值
 * @param int $calendar_type 设备类型 默认Windows 1900.Windows  1904.MAC
 * @return int 时间戳
 */
function getDateByFloatValue($dateValue = 0,$calendar_type = 1900){
    // Excel中的日期存储的是数值类型,计算的是从1900年1月1日到现在的数值
    if (1900 == $calendar_type) { // WINDOWS中EXCEL 日期是从1900年1月1日的基本日期
        $myBaseDate = 25569;// php是从 1970-01-01 25569是到1900-01-01所相差的天数
        if ($dateValue < 60) {
            --$myBaseDate;
        }
    } else {// MAC中EXCEL日期是从1904年1月1日的基本日期(25569-24107 = 4*365 + 2) 其中2天是润年的时间差?
        $myBaseDate = 24107;
    }
 
    // 执行转换
    if ($dateValue >= 1) {
        $utcDays = $dateValue - $myBaseDate;
        $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 $returnValue;// 返回时间戳
}
 
date_default_timezone_set('PRC');// 设置时区为北京时间
 
$date_float = 44281.836805556;// 小数点前面是年月日,后面是时分秒
$date_int   = getDateByFloatValue($date_float);// 获取浮点型时间对应的时间戳(UTC时间)
$date_local = date('Y-m-d H:i:s',$date_int);// 得到本地时区的标准时间
$date_utc   = gmdate('Y-m-d H:i:s',$date_int);// 得到UTC的标准时间
 
echo '浮点型时间:'.$date_float,"<br/>\n";
echo '整形时间:'.$date_int,"<br/>\n";
echo '本地时区时间:'.$date_local,"\t 与PHP设置时区有关<br/>\n";
echo 'UTC时间:'.$date_utc,"<br/>\n";

//浮点型时间:44281.836805556<br/>
//整形时间:1616789100<br/>
//本地时区时间:2021-03-27 04:05:00        与PHP设置时区有关<br/>
//UTC时间:2021-03-26 20:05:00<br/>

更简单的实现方法

$date = 25569;
$time = 24 * 60 * 60;
echo gmdate('Y-m-d H:i:s', (44281.836805556 - $date) * $time);

//2021-03-26 20:05:00


站点信息

  • 建站时间:2018-09-18
  • 网站程序:Laravel
  • 主题模板:《今夕何夕》
  • 文章统计:88条
  • 统计数据
  • 微信公众号:扫描二维码,关注我们