原本觉得这个函数是在网上能随便就能找到的,谁知道千篇一律的都是那个函数,而且发现如果今年是2018,那么2018至后面的年份根本就得不各周的开始和结束时间戳 数组。所以自己写了!但是算法方面应该可以优化!
如下直接甩函数(如果可以优化,请帮忙给出优化的函数,谢谢!):
function get_week($year) {
//获取当年第一天的日期
$yearFirstDay = $year.'-01-01 00:00:00';
$yearEndDay = $year.'-12-31 23:59:59';
//查看第一天是星期几
$week = date('N',strtotime($yearFirstDay));
//当年第一周的开始时间和结束时间(开始时间不一定是星期一)
$days = 8-$week;
$firstWeekendDay = date('Y-m-d H:i:s',strtotime($year.'-01-0'.$days.' 23:59:59'));
$weeks = array();
$weeks[1]['week_start'] = strtotime($yearFirstDay);
$weeks[1]['week_end'] = strtotime($year.'-01-0'.$days.' 23:59:59');
//组装一年中 完整的各周开始和结束时间戳
$days2 = ((strtotime($yearEndDay)-$weeks[1]['week_end'])/86400)/7;
$days3 = (int)floor($days2);
$length = $days3+1;
for($i=2;$i<=$length;$i++) {
$weeks[$i]['week_start'] = 1+$weeks[$i-1]['week_end'];
$weeks[$i]['week_end'] = 604800+$weeks[$i-1]['week_end'];
}
//组装最后一周的开始和结束时间
$remainder = ((strtotime($yearEndDay)-$weeks[1]['week_end'])/86400)%7;
if($remainder > 0) {
$data = array();
$data['week_start'] = 1+end($weeks)['week_end'];
$data['week_end'] = ($remainder*86400)+end($weeks)['week_end'];
array_push($weeks,$data);
}
return $weeks;
}