//指定日期所在的周数
$year = date('Y', strtotime($begin_date));//年度
$curweek = (int)date('W', strtotime($begin_date)); //当前周数
//根据年和周数获取当周的开始日期与结束日期(周一到周日)
function getWeekDate($year,$weeknum){
$firstdayofyear=mktime(0,0,0,1,1,$year);
$firstweekday=date('N',$firstdayofyear);
$firstweenum=date('W',$firstdayofyear);
if($firstweenum==1){
$day=(1-($firstweekday-1))+7*($weeknum-1);
$startdate=date('Y-m-d',mktime(0,0,0,1,$day,$year));
$enddate=date('Y-m-d',mktime(0,0,0,1,$day+6,$year));
}else{
$day=(9-$firstweekday)+7*($weeknum-1);
$startdate=date('Y-m-d',mktime(0,0,0,1,$day,$year));
$enddate=date('Y-m-d',mktime(0,0,0,1,$day+6,$year));
}
return array($startdate,$enddate);
}
/*
* 获取某星期的开始时间和结束时间
* time 时间
* first 表示每周星期一为开始日期 0表示每周日为开始日期
*/
function getWeekStartAndEnd($time, $first = 1)
{
//当前日期
if (!$time) $time = time();
$sdefaultDate = date("Y-m-d", $time);
//$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$w = date('W', strtotime($sdefaultDate));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$week_start = date('Y-m-d', strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days'));
//本周结束日期
$week_end = date('Y-m-d', strtotime("$week_start +6 days"));
return array("week_start" => $week_start, "week_end" => $week_end);
}
//根据年度获取该年的总周数
public function getWeek($year){
$year_start = mktime(0,0,0,1,1,$year);
$year_end = mktime(0,0,0,12,31,$year);
if (date('oW',$year_end)==date('oW',$year_start)){
return date('W',strtotime('last week',$year_end));
}else{
return date('W',$year_end);
}
}
//从当前周开始取7周 $w=0 $k=6
//从当前周的第3周开始 取7周 $w=3 $k=9
function get_currentWeek($w,$k){
$year = date("Y");
$lastyear = $year -1;
$lastyear_start = $lastyear . "-01-01";
$lastyearstartday = strtotime($lastyear_start);
if (intval(date('N', $lastyearstartday)) != '1') {
//获取去年第一周的日期
$lastyearstartday = strtotime("next Monday",strtotime($lastyear_start));
}
//获取去年的周数
$lastyear_week_num = date("L", $lastyearstartday)==='1'?53:52;
$week = date('W');
$year_start = $year . "-01-01";
$startday = strtotime($year_start);
if (intval(date('N', $startday)) != '1') {
//获取今年第一周的日期
$startday = strtotime("next Monday",strtotime($year_start));
}
$year_mondy = date("Y-m-d", $startday);
$week_array = [];
for ($i = $week + $w; $i <= $week + $k; $i++) {
$j = $i -1;
$label = $year.'年第'.$i.'周';
$start_date = date("Y-m-d 00:00:00", strtotime("$year_mondy $j week"));
$end_date = date("Y-m-d 23:59:59", strtotime("$start_date +6 day"));
//$week_array[$i-$week] = array($label,$start_date,$end_date);
$week_array[$lastyear_week_num+$i-1]['label'] = $label;
$week_array[$lastyear_week_num+$i-1]['start_date'] = $start_date;
$week_array[$lastyear_week_num+$i-1]['end_date'] = $end_date;
$week_array[$lastyear_week_num+$i-1]['flag'] = 0;
}
return $week_array;
}
// 每年多少周,每周的起止日期
function get_weekofyear($year) {
$year_start = $year . "-01-01";
$startday = strtotime($year_start);
if (intval(date('N', $startday)) != '1') {
//获取年第一周的日期
$startday = strtotime("next Monday",strtotime($year_start));
}
$year_mondy = date("Y-m-d", $startday);
//获取年的周数
$num = date("L", $startday)==='1'?53:52;
//获取每周的起、止日期
$week_array = [];
for ($i = 1; $i <= $num; $i++) {
$j = $i -1;
$label = $year.'年第'.$i.'周';
$start_date = date("Y-m-d 00:00:00", strtotime("$year_mondy $j week"));
$end_date = date("Y-m-d 23:59:59", strtotime("$start_date +6 day"));
//$week_array[$i-1] = array($label,$start_date,$end_date);
$week_array[$i]['label'] = $label;
$week_array[$i]['start_date'] = $start_date;
$week_array[$i]['end_date'] = $end_date;
$week_array[$i]['flag'] = 0;
}
return $week_array;
}
//从当前周取3周
function getNext3Week(){
$year = date("Y");
$week = date('W');
$year_start = $year . "-01-01";
$startday = strtotime($year_start);
if (intval(date('N', $startday)) != '1') {
//获取年第一周的日期
$startday = strtotime("next Monday",strtotime($year_start));
}
$year_mondy = date("Y-m-d", $startday);
$week2 = $week + 2; //??
$week3 = $week + 3;
$label = $year.'年第'.$week3.'周';
$start_date = date("Y-m-d 00:00:00", strtotime("$year_mondy $week2 week"));
$end_date = date("Y-m-d 23:59:59", strtotime("$start_date +6 day"));
$arr_date[0] = $start_date;
$arr_date[1] = $end_date;
$arr_date[2] = $label;
return $arr_date;
}
// 获取当前周
function getNowWeek($now)
{
//当前日期
$sdefaultDate = $now;
$first = 1;
$w = date('w',strtotime($sdefaultDate));
$week_start = date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
$week_end = date('Y-m-d',strtotime("$week_start +6 days"));
$next_week_start = date("Y-m-d",strtotime("+0 day",strtotime($week_start)));
$next_week_end = date("Y-m-d",strtotime("+0 day",strtotime($week_end)));
return [
$next_week_start,
$next_week_end
];
}
// 获取下周一、
function getNextWeek($now)
{
//当前日期
$sdefaultDate = $now;
$first = 1;
$w = date('w',strtotime($sdefaultDate));
$week_start = date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
$week_end = date('Y-m-d',strtotime("$week_start +6 days"));
$next_week_start = date("Y-m-d",strtotime("+7 day",strtotime($week_start)));
$next_week_end = date("Y-m-d",strtotime("+7 day",strtotime($week_end)));
return [
$next_week_start,
$next_week_end
];
}
//两日期之间的天数
function getLessDays($startdate , $enddate)
{
$startdate = strtotime($startdate);
$enddate = strtotime($enddate);
$days = round(($startdate - $enddate)/3600/24) ;
return $days;
}