-
2021-03-25 11:17:26
最近接了一个项目,其中有一需求是用php获取一年有几周以及每周开始日期和接触日期。在网上找些资料没有合适的,于是自己做了一份,下面通过两种方式实现PHP获取一年有几周以及每周开始日期和结束日期
代码一:
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
$year = (int)$_GET['year'];
$week = (int)$_GET['week'];
$weeks = date("W", mktime(0, 0, 0, 12, 28, $year));
echo $year . '年一共有' . $weeks . '周
';if ($week > $weeks || $week <= 0)
{
$week = 1;
}
if ($week < 10)
{
$week = '0' . $week;
}
$timestamp['start'] = strtotime($year . 'W' . $week);
$timestamp['end'] = strtotime('+1 week -1 day', $timestamp['start']);
echo $year . '年第' . $week . '周开始时间戳:' . $timestamp['start'] . '
';echo $year . '年第' . $week . '周结束时间戳:' . $timestamp['end'] . '
';echo $year . '年第' . $week . '周开始日期:' . date("Y-m-d", $timestamp['start']) . '
';echo $year . '年第' . $week . '周结束日期:' . date("Y-m-d", $timestamp['end']);
?>
代码二:
header("Content-type:text/html;charset=utf-8");
function getIsoWeeksInYear($year)
{
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" ? 53 : 52);
}
function weekday($custom_date)
{
$week_start = date('d-m-Y', strtotime('this week monday', $custom_date));
$week_end = date('d-m-Y', strtotime('this week sunday', $custom_date));
$week_array[0] = $week_start;
$week_array[1] = $week_end;
return $week_array;
}
echo '
Weeks in 2013
' . getIsoWeeksInYear(2013);$weekday = weekday(strtotime(date('d-m-Y', strtotime('5-8-2013'))));
echo '
10-8-2013';echo '
Start: ' . $weekday[0];echo '
End: ' . $weekday[1];?>
以上本文的全部内容,希望对大家学习PHP获取一年有几周以及每周开始日期和结束日期,有所帮助。
更多相关内容 -
js代码-输入年月日,判断这是这一年的第几个周
2021-07-14 23:31:25js代码-输入年月日,判断这是这一年的第几个周 -
输入一个日期,输出日期是这一年的第几周的第几天
2017-11-19 18:47:33输入一个用户指定的日期,输出这个日期是这一年的第几周的第几天。 -
数据统计获取一年 有多少个自然周,起止时间,当前是第几个周
2021-07-18 09:42:27最近在做大数据统计分析需求,经常会用到一些统计,比如,周统计,环比等 ,下面我们来计算一年有多少个 自然 周,直接上代码吧: /** * 获取一年每周的开始日期和结束日期 * @param $year * @return array *...最近在做大数据统计分析需求,经常会用到一些统计,比如,周统计,环比等 ,下面我们来计算一年有多少个 自然 周,直接上代码吧:
/** * 获取一年每周的开始日期和结束日期 * @param $year * @return array */ public function get_week($year) { $whole_week = $this->get_big_week($year);//获取最大周数 $str = ''; for ($i = 1; $i <= $whole_week; $i++) { $str .= $i . ','; } $str_arr = explode(',', rtrim($str, ','));//转成数组 $week_list = array(); foreach ($str_arr as $key => $value) { $week = $this->get_year_month_week($year, $value);//一周的日期 $week_list[$value] = [ 0 => $week[0], 1 => $week[6], ]; } $firstWeek = $week_list[1];// 第一周 $firstWeekDay = date('d',strtotime($firstWeek[0])); $firstYear = date('Y',strtotime($firstWeek[0])); $endYear = date('Y',strtotime($firstWeek[1])); $addWeek = $newWeekList = []; if($firstWeekDay > 1){ if($firstYear != $endYear){ //跨年 $week_list[1][0]= date('Y-m-d' ,mktime(0, 0, 0, 1,1, date($year))); $newWeekList = $week_list; } else { //不跨年 $addWeek = [ 0 => date('Y-m-d' ,mktime(0, 0, 0, 1,1, date($year))), 1 => date('Y-m-d', strtotime($firstWeek[0]) - 24 *3600), ]; $newWeekList = $this->add_week($addWeek, $week_list); } } else { $newWeekList = $week_list; } $endWeek = end($newWeekList);// 最后一周 $endWeekYear = date('Y',strtotime($endWeek[1])); $startWeekYear = date('Y',strtotime($endWeek[0])); $currentYear = date('Y',time()); if($endWeekYear != $currentYear){ //跨年了 $lastday = date("Y-m-t", strtotime('next month', strtotime("{$currentYear}-11-01"))); $weekNum = count($newWeekList); foreach($newWeekList as $key=>&$week){ if($weekNum == $key){ $week[1] = $lastday; } } $endWeek[1] = date('Y-m-t', strtotime($year."-12-01")); } $weekNum = count($newWeekList); $newWeekList[$weekNum][1] = date('Y-m-t', strtotime($year."-12-01")); return $newWeekList; } public function add_week($addWeek, $week_list){ if(!$addWeek) return $week_list; $newWeekList = []; $week_list = array_merge([$addWeek],$week_list); foreach($week_list as $key=>$week){ $newWeekList[$key+1] = $week; } return $newWeekList; } public function get_date($return, $string, $date) { if (empty($return)) { $return = "Y-m-d"; } if (empty($string)) { $string = "now"; } if (empty($date)) { $date = time(); } else { $date = strtotime(date($date)); } if (preg_match("/month/", $string)) { $first_day_of_month = date('Y-m', $date) . '-01'; $str_date = strtotime($first_day_of_month); } if (preg_match("/month/", $string)) { $l_date = date("Y-m-d", strtotime($string, $str_date)); $day = substr(date("Y-m-d", $date), 8, 2); if (substr($l_date, 0, 7) . '-' . date('t', strtotime(substr($l_date, 0, 7))) < substr($l_date, 0, 7) . '-' . $day) { $l_date = substr($l_date, 0, 7) . '-' . date('t', strtotime(substr($l_date, 0, 7))); } else { $l_date = substr($l_date, 0, 7) . '-' . $day; } $l_date = date($return, strtotime($l_date)); return $l_date; } else { return date($return, strtotime($string, $date)); } } public function get_big_week($year_now) { $big_week = $this->get_date("W", NULL, $year_now . '-12-31'); if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-30'); } if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-29'); } if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-28'); } if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-27'); } if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-26'); } if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-25'); } if ($big_week == 1) { $big_week = $this->get_date("W", NULL, $year_now . '-12-24'); } return $big_week; } public function get_year_month_week($year_now, $week_now) { //指定年和周的日期数组 $time = new \DateTime(); $time->setISODate($year_now, $week_now, 1); $result[] = $time->format('Y-m-d'); $time->setISODate($year_now, $week_now, 2); $result[] = $time->format('Y-m-d'); $time->setISODate($year_now, $week_now, 3); $result[] = $time->format('Y-m-d'); $time->setISODate($year_now, $week_now, 4); $result[] = $time->format('Y-m-d'); $time->setISODate($year_now, $week_now, 5); $result[] = $time->format('Y-m-d'); $time->setISODate($year_now, $week_now, 6); $result[] = $time->format('Y-m-d'); $time->setISODate($year_now, $week_now, 7); $result[] = $time->format('Y-m-d'); return $result; } /** * 获取当前周的起止时间 * @param $currentWeek * @param $weeklist * @return int|string */ public function setCurrentWeek($currentWeek, $weeklist) { if(!$weeklist || !$currentWeek) return 1; $week_start = $currentWeek['week_start']; foreach($weeklist as $key=>$week){ if($week_start == $week[0]){ return $key; } } } /*PHP获取当前日期是第几周和本周开始日期和本周结束日期*/ public function getNowTimeInfo($now) { $str = array(); //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期 $str['year'] = date('Y', strtotime($now)); $first = 1; //当日在整年中的第几周 $str['week'] = date('W', strtotime($now)); //获取当前周的第几天 周日是 0 周一到周六是 1 - 6 $w = date('w', strtotime($now)); //获取本周开始日期,如果$w是0,则表示周日,减去 6 天 $week_start = date('Y-m-d', strtotime("$now -" . ($w ? $w - $first : 6) . ' days')); $str['week_start'] = $week_start; //本周结束日期 $week_end = date('Y-m-d', strtotime("$week_start +6 days")); $str['week_end'] = $week_end; return $str; }
这样我们就可以获取当前是第几周,以及起止时间:
$weekFormat = new WeekFormatLogic(); $date = date("Y-m-d",time()); $currentWeek = $weekFormat->getNowTimeInfo($date); $year = date("Y",time()); $weeklist = $weekFormat->get_week($year); return $weekFormat->setCurrentWeek($currentWeek, $weeklist);
可以看到当前是滴29周:
起止时间为:
Array ( [week_start] => 2021-07-12 [week_end] => 2021-07-18 )
全部周的起止时间:
Array ( [1] => Array ( [0] => 2021-01-01 [1] => 2021-01-03 ) [2] => Array ( [0] => 2021-01-04 [1] => 2021-01-10 ) [3] => Array ( [0] => 2021-01-11 [1] => 2021-01-17 ) [4] => Array ( [0] => 2021-01-18 [1] => 2021-01-24 ) [5] => Array ( [0] => 2021-01-25 [1] => 2021-01-31 ) [6] => Array ( [0] => 2021-02-01 [1] => 2021-02-07 ) [7] => Array ( [0] => 2021-02-08 [1] => 2021-02-14 ) [8] => Array ( [0] => 2021-02-15 [1] => 2021-02-21 ) [9] => Array ( [0] => 2021-02-22 [1] => 2021-02-28 ) [10] => Array ( [0] => 2021-03-01 [1] => 2021-03-07 ) [11] => Array ( [0] => 2021-03-08 [1] => 2021-03-14 ) [12] => Array ( [0] => 2021-03-15 [1] => 2021-03-21 ) [13] => Array ( [0] => 2021-03-22 [1] => 2021-03-28 ) [14] => Array ( [0] => 2021-03-29 [1] => 2021-04-04 ) [15] => Array ( [0] => 2021-04-05 [1] => 2021-04-11 ) [16] => Array ( [0] => 2021-04-12 [1] => 2021-04-18 ) [17] => Array ( [0] => 2021-04-19 [1] => 2021-04-25 ) [18] => Array ( [0] => 2021-04-26 [1] => 2021-05-02 ) [19] => Array ( [0] => 2021-05-03 [1] => 2021-05-09 ) [20] => Array ( [0] => 2021-05-10 [1] => 2021-05-16 ) [21] => Array ( [0] => 2021-05-17 [1] => 2021-05-23 ) [22] => Array ( [0] => 2021-05-24 [1] => 2021-05-30 ) [23] => Array ( [0] => 2021-05-31 [1] => 2021-06-06 ) [24] => Array ( [0] => 2021-06-07 [1] => 2021-06-13 ) [25] => Array ( [0] => 2021-06-14 [1] => 2021-06-20 ) [26] => Array ( [0] => 2021-06-21 [1] => 2021-06-27 ) [27] => Array ( [0] => 2021-06-28 [1] => 2021-07-04 ) [28] => Array ( [0] => 2021-07-05 [1] => 2021-07-11 ) [29] => Array ( [0] => 2021-07-12 [1] => 2021-07-18 ) [30] => Array ( [0] => 2021-07-19 [1] => 2021-07-25 ) [31] => Array ( [0] => 2021-07-26 [1] => 2021-08-01 ) [32] => Array ( [0] => 2021-08-02 [1] => 2021-08-08 ) [33] => Array ( [0] => 2021-08-09 [1] => 2021-08-15 ) [34] => Array ( [0] => 2021-08-16 [1] => 2021-08-22 ) [35] => Array ( [0] => 2021-08-23 [1] => 2021-08-29 ) [36] => Array ( [0] => 2021-08-30 [1] => 2021-09-05 ) [37] => Array ( [0] => 2021-09-06 [1] => 2021-09-12 ) [38] => Array ( [0] => 2021-09-13 [1] => 2021-09-19 ) [39] => Array ( [0] => 2021-09-20 [1] => 2021-09-26 ) [40] => Array ( [0] => 2021-09-27 [1] => 2021-10-03 ) [41] => Array ( [0] => 2021-10-04 [1] => 2021-10-10 ) [42] => Array ( [0] => 2021-10-11 [1] => 2021-10-17 ) [43] => Array ( [0] => 2021-10-18 [1] => 2021-10-24 ) [44] => Array ( [0] => 2021-10-25 [1] => 2021-10-31 ) [45] => Array ( [0] => 2021-11-01 [1] => 2021-11-07 ) [46] => Array ( [0] => 2021-11-08 [1] => 2021-11-14 ) [47] => Array ( [0] => 2021-11-15 [1] => 2021-11-21 ) [48] => Array ( [0] => 2021-11-22 [1] => 2021-11-28 ) [49] => Array ( [0] => 2021-11-29 [1] => 2021-12-05 ) [50] => Array ( [0] => 2021-12-06 [1] => 2021-12-12 ) [51] => Array ( [0] => 2021-12-13 [1] => 2021-12-19 ) [52] => Array ( [0] => 2021-12-20 [1] => 2021-12-26 ) [53] => Array ( [0] => 2021-12-27 [1] => 2021-12-31 ) )
当然了,这里计算的时候是从元旦开始计算的,起止周可能不满足7天,中间其他的周都是正常的
-
C语言计算今天是一年的第几周
2021-04-06 16:56:25@brief 计算今天是一年的第几周 @param [in] nYear 年 @param [in] nMonth 月 @param [in] nDate 日 @param [in] nWeek 星期几 @return uint16_t */ uint16_t Cal_YearWeek(int nYear, int nMonth, int nDate.../*! @brief 计算今天是一年的第几周 @param [in] nYear 年 @param [in] nMonth 月 @param [in] nDate 日 @param [in] nWeek 星期几 @return uint16_t */ uint16_t Cal_YearWeek(int nYear, int nMonth, int nDate, int nWeek) { uint16_t uYearWeek; int nWeekCnt = 0; int nWeekRemain = 0; int nCount = 0; switch(nMonth-1) { case 11: nCount += 30; case 10: nCount += 31; case 9: nCount += 30; case 8: nCount += 31; case 7: nCount += 31; case 6: nCount += 30; case 5: nCount += 31; case 4: nCount += 30; case 3: nCount += 31; case 2: if((nYear%4 == 0 && nYear %100 != 0) || nYear%400 == 0) { nCount += 29; } else { nCount += 28; } case 1: nCount += 31; default: break; } // 根据当前天数计算属于一年的第几周 nCount += nDate; nWeekCnt = (nCount + (7 - nWeek))/7; nWeekRemain = (nCount + (7 - nWeek))%7; uYearWeek = nWeekCnt + ((nWeekRemain == 0) ? 0 : 1); return uYearWeek; }
-
hive计算周是一年的第几周
2021-01-19 11:01:09函数weekofyear 可以直接计算当前周属于年的第几周 对于跨年周,以当前周所在年天数多的年为准。即一周大于等于4天时间在上一年,则为上一年的最后一周,否则为新年的第一周 查询语句 查询结果 附日历 ...函数 weekofyear 可以直接计算当前周属于年的第几周
对于跨年周,以当前周所在年天数多的年为准。即一周大于等于4天时间在上一年,则为上一年的最后一周,否则为新年的第一周
查询语句
查询结果
附日历
以上 周 指自然周(周一到周日为一周)
业务需要,我们的周为业务周,周日到周六为一周,判断业务周围年的第几周,周日这天需要特殊处理。
如果是非跨年周,周日直接算作自然周所在周的下一周;
如果是跨年周,周日所在周分两种情况,1跨年周天数在新的一年天数较多,比如2018年的这种,就算做新年的第一周;2如果跨年周天数所在上一年天数较多,比如2021年这种情况,则算在上一年的最后一周
实现逻辑(mm_week是重点逻辑)
select datekey ,date_cn ,dayofweek ,dayofweek_cn ,week ##自然周int ,year ##当前年int ,month ,day ,quarter ,mm_week_begin_date ##业务周开始时间(周日) ,mm_week_end_date ##业务周结束时间(周六) ,(case ##是周日&&周跨年&&周所在前一年的天数较多,算作前一年的最后一周 when cast(dayofweek as int) = 7 and substr(mm_week_begin_date,1,4) != substr(mm_week_end_date,1,4) and year(date_sub(next_day(date,'MO'),4)) = substr(mm_week_begin_date,1,4) then week + 1 ##是周日&&周跨年&&周所在新一年的天数较多(因为 !周所在前一年的天数较多 所以 周所在新一年的天数较多),算作新年的第一周 when cast(dayofweek as int) = 7 and year(date_sub(next_day(date,'MO'),4)) != substr(mm_week_begin_date,1,4) then 1 ##是周日 && !周跨年 算作下一周 when cast(dayofweek as int) = 7 and year(date_sub(next_day(date,'MO'),4)) = substr(mm_week_begin_date,1,4) then week + 1 else week end) as mm_week ,(case when substr(mm_week_begin_date,1,4) != substr(mm_week_end_date,1,4) and year(date_sub(next_day(date,'MO'),4)) = substr(mm_week_begin_date,1,4) then substr(mm_week_begin_date,1,4) else year end) as mm_year from dim.dim_date where datekey between $now.datekey and $endnow.datekey
-
java中获取日期属于哪一年的第几周
2018-12-06 11:26:49在设计数据模型的时候需要用到年份+周数作为唯一索引,于是就需要判断一个日期是属于哪一年的第几周,本来问题很简单的,但是会涉及到跨年的问题,例如以周一作为一个星期的开始,那么2018-12-30日星期日,属于2018... -
MySQL查询日期为一年第几天第几周,天数周数反查日期
2021-11-27 22:41:19某日期是一年的第几天,第几周,日期查周数,查天数;第几天反查日期 ,周数反查日期. -
Java中一年有几周、周的计算
2016-09-23 10:03:12但因为52周总共364天,而平年是365天,闰年是366天,如果一年只有52周的话,就会差几天。所以每过几年,就会出现一年有53周。比如2017年12月31日就位于当年第53周: cal.setFirstDayOfWeek(Calendar.MONDAY); cal.... -
一年第几周
2016-08-01 15:33:052016年第一周几号开始:据出国留学网万年历可知,2016年的第一天是周五(1月日),第一个周末是1月3日,第一个周一是1月4日(农历十一月廿二)。因此,2016年第一周从1月4号开始。 2016年有多少周末 从2016年... -
SQL Server 判断时间是一年的第几周、星期几
2020-08-06 11:53:541.计算第几周 selectdatepart(wk,'2020-12-31') 第几周 2.计算星期几 select case datepart(dw,getdate()) when 1 then '星期天 ' when 2 then '星期一 ' when 3 then '星期二 ' when 4 then '星期三 '... -
计算一年有多少个周 每个周的开始日期和结束日期是什么
2018-11-06 15:43:27计算一年有多少个周 每个周的开始日期和结束日期是什么 -
Python实现获取某天是某个月中的第几周
2021-01-21 17:46:12找了半天竟然没找到,如何在Python的datetime处理上,获取某年某月某日,是属于这个月的第几周。 无奈之下求助同学,同学给写了一个模块。【如果你知道Python有这个原生的库,请不吝赐教】 我稍作整理记录在下。 ... -
hive根据日期算哪一年的第几周(年周)以及算周几星期几
2019-03-02 17:42:31按照习惯,跨年的周中的在哪一年的天数多就算哪一年的周, 可以通过以下sql判断跨年的周属于哪一年,实现得到前一天所在的年周 select year(date_sub(next_day(date_sub(current_date,1),'MO'),4))*100+weekof... -
Python 当前时间是那一年第几周的周几
2021-04-28 19:05:49返回(XX年,一年中的第几周,这一天是周几) >>> from datetime import datetime >>> datetime.now().isocalendar() # 今年2021年;第17周; 周3; 今天2021年04月28日 (2021, 17, 3) >>... -
java获取一年共有多少周
2021-03-14 23:49:15满意答案owetj推荐于 2016.08.21采纳率:55%等级:9已帮助:863人计算一年有多少个周的思路:首先,每年至少有52个周,至多有53个周,取决于周一是在哪年(也可以定位周日,这个是由需求决定的),以下是详细代码,... -
Java实现计算一个月有多少天和多少周
2020-09-03 14:19:56主要介绍了Java实现计算一个月有多少天和多少周,本文直接给出实例代码,需要的朋友可以参考下 -
java获取一年的周数和间隔天数
2021-02-12 18:35:44= year2) //同一年 103 {104 int timeDistance = 0;105 for(int i = year1 ; i ; i ++)106 {107 if(i%4==0 && i%100!=0 || i%400==0) //闰年 108 {109 timeDistance += 366;110 }111 else //不是闰年 112 {113 ... -
js根据一年中的周(一年中的第几周),来获取周的日期范围(根据一年的第N周,来获取第N周的日期范围)
2019-04-09 15:05:39//当这一年的1月1日为周日时则本年有54周,否则没有54周,没有则去除第54周的提示 var _week = date.getDay(); if(_week!=0){//一年53周情况 if(weeks==54){ return '今年没有54周'; } var cnt=0;// 获取距离周末的... -
获取指定日期是一年的第几周
2015-08-05 18:11:002019独角兽企业重金招聘Python工程师标准>>> ... -
mysql中是如何处理周数,一年的第一周到底从哪天开始计算?
2021-01-08 10:17:45对我而言,这一周是2021年的第一周,但是在mysql中是如何处理呢? 之前做任务的时候,在获取周数相关信息的时候,格式化时间一直用的是%U, 以至于一直认为mysql中处理周相关的逻辑时,是从第0周开始,每周日是一周的... -
python中 已知这一周是某个月的第几周 怎么返回这一周是这一年的第几周
2021-03-29 17:26:35比如 我有一周是 4月的第2周 那么这一周是这一年的第多少周呢?</p> -
c# 计算一年有多少周
2020-01-02 09:26:15前两天计算获取2019有多少周,现有的代码算出来有54周,看的我一脸懵逼。 以周一为每周的第一天 public static int GetYearWeekCount(int year) { var dateTime = DateTime.Parse(year + "-01-01"); var ... -
Java获取一年有多少周、某周的第一天和最后一天,当前时间所在当年的实际周数
2021-02-28 11:57:08/*下边是解决年初第一周的前几天有可能也属于上一年的最后的一周的后几天,导致当前时间获取得到的所在周数和实际不符的问题*/ //获取当前年已经过的周数c.setFirstDayOfWeek(Calendar.MONDAY);c.... -
Oracle--计算某一日期为一年中的第几周
2021-05-02 08:40:39'YYYYMMDD'), 'yyyyiw') as week, --oracle求当年的第几周 #常用,但是有一个问题,比如20181231是周一,但是却计算结果为201801,即2018第一周内。 to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyww') as week2... -
python 计算一年内的所有周的具体日期详解
2020-11-26 02:31:33date def all_weeks(year): '''计算一年内所有周的具体日期,每周都是7天,可能最后一周到 下年 week_date 输出如{1: ['20181231', '20190101', '20190102', '20190103', '20190104', '20190105', '20190106'],...} ... -
Java获取指定日期属于当年第几周以及指定周的开始和结束时间
2021-03-10 07:51:25//设置星期一为一周开始的第一天calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置在一年中第一个星期所需最少天数calendar.setMinimalDaysInFirstWeek(4);//获得当前的年int weekYear = c...