您现在的位置是:网站首页>PHPPHP
Laravel PHP 中EXCEL导入浮点型的日期转成格式化本地日期和时间
左鹏03-16 09:57:40【PHP】2,645人已围观
简介解释:float类型时间其实是距离指定时间的天数,小数前是整数天所以是日期,小数后面的是当天又不满一整天所以时分秒。 /** * EXCEL 中读取到的时间原型是 浮点型,现在要转成 格式化的标准时间格式 * 返回的时间是 UTC 时间(世界协调时间,加上8小时就是北京时间) * @param float|int $dateValue Excel浮点型数值 * @param int $calendar_type 设备类型 默认Windows 1900.
解释: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
- 网站程序:Spring Boot
- 主题模板:《今夕何夕》
- 文章统计:104条
- 微信公众号:扫描二维码,关注我们
