strtotime函数在php项目中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
使用方法如下:
$nowDayDT = strtotime( date('Y-m-d') );
$__startT = microtime(TRUE);
for($i=0; $i<$allTime; $i += $gapTime){
$count = 0;
//用于数据比较的
$startDT = $nowDayDT+$i;
$endDT = $nowDayDT+$i+$gapTime;
//用于显示的
$xAxis1 = date('H:i', $nowDayDT+$i);
$xAxis2 = date('H:i', $nowDayDT+$i+$gapTime);
foreach($rawData as $line){
$time = strtotime($line['log_dt']);
if( $startDT<=$time && $time<$endDT ){
$count ++;
}
}
$resArr[] = [
'date'=>$xAxis1.'~'.$xAxis2,
'number'=>$count
];
}
echo microtime(TRUE)-$__startT;
那这样的话,基本上是没办法再用这个strtotime的函数的了,那还有什么办法比较时间大小呢?答案很简单粗暴,PHP里面可以直接比较两个日期时间字符串!所以改过后的代码如下。然后现在的运行时间大概是 0.3秒
$__startT = microtime(TRUE);
for($i=0; $i<$allTime; $i += $gapTime){
$count = 0;
//用于数据比较的
$startDT = date('Y-m-d H:i:s', $nowDayDT+$i);
$endDT = date('Y-m-d H:i:s', $nowDayDT+$i+$gapTime);
//用于显示的
$xAxis1 = date('H:i', $nowDayDT+$i);
$xAxis2 = date('H:i', $nowDayDT+$i+$gapTime);
foreach($rawData as $line){
$time = $line['log_dt'];
if( $startDT<=$time && $time<$endDT ){
$count ++;
}
}
$resArr[] = [
'date'=>$xAxis1.'~'.$xAxis2,
'number'=>$count
];
}
echo microtime(TRUE)-$__startT;
遍历再优化
大家可能发现一个问题,for 里面嵌套一个 foreach,这性能有点担忧,其中里面的 foreach 有必要完全遍历吗?其实是不必的。只要查SQL数据的时候,按时间排序排出来。优化后的时间比较算法如下:
for{ ...
foreach($rawData as $line){
$time = $line['log_dt'];//strtotime($line['log_dt']);
//优化算法计算
if($time<$startDT) continue; //小于开始时间则跳过
if($time>=$endDT) break; //大于结束时间则结束
$count ++; //否则为符合条件
//原始的算法
// if( $startDT<=$time && $time<$endDT ){
// $count ++;
// }
}
...}
这里巧用了 continue 和 break 关键字,用于跳过一次循环和结束整个循环。这次的话,一天中刚开始的时间统计中,后面很大一部分数据的都可以直接跳过。最后总遍历时间缩短为约0.12秒 。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。