PHP把一段时间处理成分时间段数组(带有名称及截止时间)
来源:互联网 发布:农村淘宝服务站怎么绑 编辑:程序博客网 时间:2024/04/29 03:06
背景:做数据分析时不免会有对于时间段的划分与分组查询处理数据,时间段的分段处理也很闹人,经过几次麻烦之后,自己做了一个小小的时间处理函数。
说明:只需把开始和截止时间放入,就会返回时间段数组,可以根据不同的需求加以修改即可,不错的函数呦。
代码段:
public function timeArrayProcess($startTime, $endTime) { $format = "Y-m-d H:i:s"; $timeLength = date_diff(date_create($startTime), date_create($endTime)); //echo $diff->format("%a days"); $s_stamp = strtotime($startTime); $e_stamp = strtotime($endTime); $time_arr = array(); if ($timeLength->days <= 1) { $type = "hour"; } elseif (($timeLength->days > 1) and ($timeLength->days <= 31)) { $type = "day"; } elseif (($timeLength->days > 31) and ($timeLength->days <= 92)) { $type = "week"; } elseif (($timeLength->days > 92) and ($timeLength->days <= 730)) { $type = "month"; } else { $type = "year"; } switch ($type) { case hour: $start = date('Y-m-d H:00:00', strtotime($startTime)); $end = date('Y-m-d H:00:00', strtotime($endTime)); $ns_stamp = strtotime($start); $ne_stamp = strtotime($end); if ($ns_stamp == $s_stamp) { $i = 0; $ns_stamp = $s_stamp; } else { $i = 1; $time_arr[0][x] = date('y-m-d H', $s_stamp) . "时"; $time_arr[0][start] = date($format, $s_stamp); $ns_stamp+=3599; $time_arr[0][end] = date($format, $ns_stamp); $ns_stamp+=1; } while ($ns_stamp < $ne_stamp) { $time_arr[$i][x] = date('y-m-d H', $ns_stamp) . "时"; $time_arr[$i][start] = date($format, $ns_stamp); $ns_stamp+=3599; //if ($ns_stamp < $ne_stamp) { $time_arr[$i][end] = date($format, $ns_stamp); $ns_stamp+=1; $i++; //} else { //break; // } } $e_stamp-=1; if ($ne_stamp < $e_stamp) { $time_arr[$i][x] = date('y-m-d H', $ne_stamp) . "时"; $time_arr[$i][start] = date($format, $ne_stamp); $time_arr[$i][end] = date($format, $e_stamp); } break; case day: $start = date('Y-m-d', strtotime($startTime)); $end = date('Y-m-d', strtotime($endTime)); $ns_stamp = strtotime($start); $ne_stamp = strtotime($end); if ($ns_stamp == $s_stamp) { $i = 0; } else { $i = 1; $time_arr[0][x] = date('y-m-d', $s_stamp); $time_arr[0][start] = date($format, $s_stamp); $ns_stamp+=86399; $time_arr[0][end] = date($format, $ns_stamp); $ns_stamp+=1; }//$ne_stamp = $e_stamp; while ($ns_stamp < $ne_stamp) { $time_arr[$i][x] = date('y-m-d', $ns_stamp); $time_arr[$i][start] = date($format, $ns_stamp); $ns_stamp+=86399; if ($ns_stamp < $ne_stamp) { $time_arr[$i][end] = date($format, $ns_stamp); $ns_stamp+=1; $i++; } } $e_stamp-=1; //if ($ne_stamp < $e_stamp) { $time_arr[$i][x] = date('y-m-d', $ns_stamp); $time_arr[$i][start] = date($format, $ns_stamp); $time_arr[$i][end] = date($format, $e_stamp); //} break; case week: $start = date('Y-m-d', strtotime($startTime)); $end = date('Y-m-d', strtotime($endTime)); $ns_stamp = strtotime($start); $ne_stamp = strtotime($end); if ($ns_stamp == $s_stamp) { $i = 0; } else { $i = 1; $time_arr[0][x] = date('y-m-d', $s_stamp); $time_arr[0][start] = date($format, $s_stamp); $w = date('N', strtotime($time_arr[0][start])); $ns_stamp+=(8 - $w ) * 86400 - 1; $time_arr[0][end] = date($format, $ns_stamp); $arr = array(date('y-m-d', strtotime($time_arr[0][start])), date('y-m-d', strtotime($time_arr[0][end]))); $time_arr[0][x] = implode("~", $arr); $ns_stamp+=1; } //$ne_stamp = $e_stamp; while ($ns_stamp < $ne_stamp) { $time_arr[$i][x] = date('y-m-d', $ns_stamp); $time_arr[$i][start] = date($format, $ns_stamp); $ns_stamp+=604799; //(7 * 86400 - 1) if ($ns_stamp < $ne_stamp) { $time_arr[$i][end] = date($format, $ns_stamp); $arr = array(date('y-m-d', strtotime($time_arr[$i][start])), date('y-m-d', strtotime($time_arr[$i][end]))); $time_arr[$i][x] = implode("~", $arr); $ns_stamp+=1; $i++; } /* else { break; } */ } $e_stamp-=1; //if ($ne_stamp < $e_stamp) { $time_arr[$i][end] = date($format, $e_stamp); $arr = array(date('y-m-d', strtotime($time_arr[$i][start])), date('y-m-d', strtotime($time_arr[$i][end]))); $time_arr[$i][x] = implode("~", $arr); //} break; case month: $start = date('Y-m', strtotime($startTime)); $end = date('Y-m', strtotime($endTime)); $ns_stamp = strtotime($start); $ne_stamp = strtotime($end); if ($ns_stamp == $s_stamp) { $i = 0; $ns_stamp = $s_stamp; } else { $i = 1; $time_arr[0][x] = date('Y-m', $s_stamp); $time_arr[0][start] = date($format, $s_stamp); $num = date("t", $s_stamp); $ns_stamp+=$num * 86400 - 1; $time_arr[0][end] = date($format, $ns_stamp); $ns_stamp+=1; } while ($ns_stamp < $ne_stamp) {//这里累加每个月的的总秒数 计算公式:上一月1号的时间戳秒数减去当前月的时间戳秒数 $time_arr[$i][x] = date('Y-m', $ns_stamp); $time_arr[$i][start] = date($format, strtotime($time_arr[$i][x])); $num = date("t", $ns_stamp); $ns_stamp+=$num * 86400 - 1; $time_arr[$i][end] = date($format, $ns_stamp); $ns_stamp+=1; $i++; } $e_stamp-=1; //if ($ne_stamp < $e_stamp) { $time_arr[$i][x] = date('Y-m', $ne_stamp); $time_arr[$i][start] = date($format, strtotime($time_arr[$i][x])); $time_arr[$i][end] = date($format, $e_stamp); //} break; case year: $start = date('Y-01-01 00:00:00', strtotime($startTime)); $end = date('Y-01-01 00:00:00', strtotime($endTime)); $ns_stamp = strtotime($start); $ne_stamp = strtotime($end); if ($ns_stamp == $s_stamp) { $i = 0; } else { $i = 1; $time_arr[0][x] = date('Y', $s_stamp); $time_arr[0][start] = date($format, $s_stamp); $s_stamp = strtotime(date("Y-12-31 23:59:59", $s_stamp)); $time_arr[0][end] = date($format, $s_stamp); $nu = 0; for ($j = 01; $j <= 12; $j++) { $stamp = strtotime(date("Y-$j", $s_stamp)); $nu += date("t", $stamp); } $ns_stamp+=$nu * 86400; }//$ne_stamp = $e_stamp; while ($ns_stamp < $ne_stamp) { $time_arr[$i][x] = date('Y', $ns_stamp); $time_arr[$i][start] = date($format, $ns_stamp); $n = 0; for ($j = 01; $j <= 12; $j++) { $stamp = strtotime(date("Y-$j", $ns_stamp)); $n += date("t", $stamp); } $ns_stamp+=$n * 86400 - 1; $time_arr[$i][end] = date($format, $ns_stamp); $ns_stamp+=1; $i++; } $e_stamp-=1; //if ($ne_stamp < $e_stamp) { $time_arr[$i][x] = date('Y', $ne_stamp); $time_arr[$i][start] = date($format, $ne_stamp); $time_arr[$i][end] = date($format, $e_stamp); //} break; default: break; } //var_dump($time_arr); return $time_arr;}
0 0
- PHP把一段时间处理成分时间段数组(带有名称及截止时间)
- Oracle中时间处理及分时间段统计
- Oracle中时间处理及分时间段统计
- php时间段内时间列表
- php 把数组处理成csv格式
- php获取各个时间段的时间
- java按照月份把一个时间段拆分成多个时间区间
- Java 把时间根据时、分、秒转换为时间段
- php 误把字符串当作数组处理时
- JS获取一段时间的日期(获取时间轴日期数组)
- PHP对数组及字符串的处理
- 办公_Excel中怎么把时间换算成分钟
- 吞吐量 截止时间 响应时间
- Java 对一组时间进行处理 提出连续的时间段
- PHP数组处理(一)
- PHP数组处理(二)
- PHP 数组处理(一)
- php的取得时间段的时间戳函数
- pat谁先倒(令人痛苦的水题)
- Householder和Lanczos双对角化算法用R语言实现
- listview divider 边距
- TP3.2.3 查询今天 明天 上月 下月数据
- Git版本管理的简单应用
- PHP把一段时间处理成分时间段数组(带有名称及截止时间)
- TP3.2.3 求出每年每月详细数据
- 【排序算法】-归并排序
- android studio异常
- 数据结构与算法概述
- PyQt4中的Stacked Widget应用
- android系统的四种文件操作模式
- 数组排序问题
- 如何每天靠iPhone赚零钱