获取一年内的星期列表及每周起始时间 - PHP 源码
我在网上找了半天, 找到的都是不能用的, 没辙就自己写了一个
别跟我讨论是不是最优算法, 多几个 CPU 时钟周期, 死不了
- public static
- function getWeeks($format = "second", $year = null) {
- if ($year == null) {
- $year = date('Y');
- }
- $second_of_day = 24 * 3600;
- $year_start = $year."-01-01 00:00:00";
- $year_end = $year."-12-31 23:59:59";
- $startday = strtotime($year_start);
- $day_of_week = date('N', $startday);
- $first_week_start = $startday;
- $first_week_end = $startday + (7 - $day_of_week) * $second_of_day + $second_of_day - 1;
- $week_array[0] = array($first_week_start, $first_week_end);
- $endday = strtotime($year_end);
- $day_of_week = date('N', $endday);
- $last_week_start = $endday - $day_of_week * $second_of_day + 1;
- $last_week_end = $endday;
- $last_week = array($last_week_start, $last_week_end);
- $during = $last_week_start - $first_week_end;
- $during_total_week = intval($during / (7 * $second_of_day));
- for ($i = 0; $i <$during_total_week; $i++) {
- $week_array[$i + 1] = array($first_week_end + (7 * $i * $second_of_day) + 1, $first_week_end + (($i + 1) * $second_of_day * 7));
- }
- $week_array[$during_total_week + 1] = $last_week;
- if ($format != "second") {
- foreach($week_array as $i =>$week) {
- $week_array_of_date_format[$i] = array(date($format, $week[0]), date($format, $week[1]));
- }
- return $week_array_of_date_format;
- }
- return $week_array;
- }
来源: https://www.php1.cn/detail/php-5ac298fcd9.html