以下实现两种功能:
1、根据年份和同数获取周的起止日期;
2、根据日期获取年份、月份、天、星期几、本月天数、本年天数、本年第几周及起止日期。
代码如下:
LANG-PHPwww.hilo8.com
- //调用实例
- 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