以下实现两种功能:
1、根据年份和同数获取周的起止日期;
2、根据日期获取年份、月份、天、星期几、本月天数、本年天数、本年第几周及起止日期。
代码如下:
//调用实例 public function ts(){ dump($this->getWeekDate(2023,27)); dump($this->getDateInfo('2023-07-06')); } //根据年份和周数获取日期范围,返回周的起止日期(即周一至周日的日期) private function getWeekDate($year, $weeknum) { $firstdayofyear = mktime(0, 0, 0, 1, 1, $year); $firstweekday = date('N', $firstdayofyear); //星期数 $firstweenum = date('W', $firstdayofyear); //周数 if (intval($firstweenum) == 1) { $day = (0 - ($firstweekday - 1)) + 7 * ($weeknum - 1); } else { $day = (8 - $firstweekday) + 7 * ($weeknum - 1); } $startdate = date('Y-m-d', mktime(0, 0, 0, 1, $day+1, $year)); $enddate = date('Y-m-d', mktime(0, 0, 0, 1, $day+7, $year)); return [$startdate, $enddate]; } //根据日期获取年份、月份、天、星期几、本月天数、本年天数、本年第几周及起止日期 private function getDateInfo($now) { $arr = array(); //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期 $arr['year'] = date('Y', strtotime($now)); $first = 1; $arr['month'] = date('m', strtotime($now)); $arr['day'] = date('d', strtotime($now)); $arr['week'] = date('N', strtotime($now)); //当年总天数 $arr['year_days'] = date('L', strtotime($now))?'366':'365'; //本月总天数 $arr['month_days'] = date("t",strtotime($now)); //当年总周数 $year_end = mktime(0,0,0,12,31, $arr['year']); $arr['year_weeks']=(intval(date('W',$year_end))===1)?date('W',strtotime('last week',$year_end)):date('W',$year_end); //当日在整年中的第几周, 获取当前周的第几天 周日是 0 周一到周六是 1 - 6 $arr['week_num'] = date('W', strtotime($now)); $w = date('w', strtotime($now)); //获取本周开始日期,如果$w是0,则表示周日,减去 6 天 $arr['week_start'] = $week_start = date('Y-m-d', strtotime("$now -" . ($w ? $w - $first : 6) . ' days')); //本周结束日期 $week_end = date('Y-m-d', strtotime("$week_start +6 days")); $arr['week_end'] = $week_end; return $arr; }
运行结果如下:
上一篇:PHP 实现数组分页显示
讨论数量:0