1. /*PHP获取当前日期是第几周和本周开始日期和本周结束日期*/
  2. //$now = '2018-11-13';周二
  3. public function getNowTimeInfo($now)
  4. {
  5. $str = array();
  6. //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
  7. $str['year'] = date('Y', strtotime($now));
  8. $first = 1;
  9. //当日在整年中的第几周
  10. $str['week'] = date('W', strtotime($now));
  11. //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
  12. $w = date('w', strtotime($now));
  13. //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
  14. $week_start = date('Y-m-d', strtotime("$now -" . ($w ? $w - $first : 6) . ' days'));
  15. $str['week_start'] = $week_start;
  16. //本周结束日期
  17. $week_end = date('Y-m-d', strtotime("$week_start +6 days"));
  18. $str['week_end'] = $week_end;
  19. return $str;

返回值:

Array
(
    [year] => 2018
    [week] => 46
    [week_start] => 2018-11-12//周一
    [week_end] => 2018-11-18//周日
)

----------------------------------------------------------------------------------------------------------------------------

  1. /**
  2. * 获取一年每周的开始日期和结束日期
  3. * @param $year
  4. * @return mixed
  5. */
  6. public static function get_week($year)
  7. {
  8. $year_start = $year . "-01-01";
  9. $year_end = $year . "-12-31";
  10. $startday = strtotime($year_start);
  11. if (intval(date('N', $startday)) != '1') {
  12. $startday = strtotime("next monday", strtotime($year_start)); //获取年第一周的日期
  13. }
  14. $year_mondy = date("Y-m-d", $startday); //获取年第一周的日期
  15.  
  16. $endday = strtotime($year_end);
  17. if (intval(date('W', $endday)) == '7') {
  18. $endday = strtotime("last sunday", strtotime($year_end));
  19. }
  20.  
  21. //$num = intval(date('W', $endday));可以获取当年以前的年份有多少周,如果是当年还没到12-31号$num为1
  22.   $num = 52;//一年约52周
  23. for ($i = 1; $i <= $num; $i++) {
  24. $j = $i - 1;
  25. $start_date = date("Y-m-d", strtotime("$year_mondy $j week "));
  26.  
  27. $end_day = date("Y-m-d", strtotime("$start_date +6 day"));
  28.  
  29. $week_array[$i] = array(
  30. $start_date, $end_day);
  31. }
  32. return $week_array;
  33. }

返回值:共52周

但上面这个获取一年每周的日期遇到头一年最后几天和今年的开始几天是第一周时就不好用了(如2019年第一周是2018-12-31至2019-01-06)而我这个上面的第一周是从2019-01-07至2019-01-13

---------------------------------------------------------------------------------------------------------------------------------------------

如果遇到上面的情况要求周数严谨,可以用下面的:

  1. function get_week_all($year)
  2. {
  3. $whole_week = $this->get_big_week($year);//获取最大周数
  4. $str = '';
  5. for ($i = 1; $i <= $whole_week; $i++) {
  6. $str .= $i . ',';
  7. }
  8. $str_arr = explode(',', rtrim($str, ','));//转成数组
  9. $week_list = array();
  10. foreach ($str_arr as $key => $value) {
  11. $week_list[$key]['num'] = $value;
  12. $week = $this->get_year_month_week($year, $value);//一周的日期
  13. $week_list[$key]['detail'] = "第" . $value . "周(" . $week[0] . "至" . $week[6] . ")";
  14. }
  15. return $week_list;
  16. }
  1. function get_big_week($year_now)
  2. {
  3. $big_week=$this->get_date("W",NULL,$year_now.'-12-31');
  4. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-30');}
  5. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-29');}
  6. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-28');}
  7. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-27');}
  8. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-26');}
  9. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-25');}
  10. if($big_week==1){$big_week=$this->get_date("W",NULL,$year_now.'-12-24');}
  11. return $big_week;
  12. }
  1. function get_year_month_week($year, $value)
  2. {
  3. //指定年和周的日期数组
  4. $time=new \DateTime();
  5. $time->setISODate($year_now,$week_now,1);
  6. $result[]=$time->format('Y-m-d');
  7. $time->setISODate($year_now,$week_now,2);
  8. $result[]=$time->format('Y-m-d');
  9. $time->setISODate($year_now,$week_now,3);
  10. $result[]=$time->format('Y-m-d');
  11. $time->setISODate($year_now,$week_now,4);
  12. $result[]=$time->format('Y-m-d');
  13. $time->setISODate($year_now,$week_now,5);
  14. $result[]=$time->format('Y-m-d');
  15. $time->setISODate($year_now,$week_now,6);
  16. $result[]=$time->format('Y-m-d');
  17. $time->setISODate($year_now,$week_now,7);
  18. $result[]=$time->format('Y-m-d');
  19. return $result;

得到结果:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  1. //PHP计算两个日期的差值
  2. $sdate = new DateTime("1949-10-01");
  3. $edate = new DateTime();
  4. $interval = $sdate->diff($edate);
  5. echo "差值 : " . $interval->y . " 年, " . $interval->m." 月, ".$interval->d." 天 ";

---------------------
作者:锅巴胸
来源:CSDN
原文:https://blog.csdn.net/sinat_15955423/article/details/84033680
版权声明:本文为博主原创文章,转载请附上博文链接!

PHP获取一年有多少周和每周开始和结束日期的更多相关文章

  1. PHP计算每月几周,每周的开始结束日期

    PHP计算每月几周,每周的开始结束日期 因为项目中需要一个每周工作计算的功能,具体日期的算法是,把每月拆分成几个周,最后一个星期这个月份的天数不够就补上下个月的. 列如今天8月27星期一,这个月有31 ...

  2. PHP计算一年有多少周,每周开始日期和结束日期

    一年有多个周,每周的开始日期和结束日期 参考代码一:[正在使用的版本] <?php header("Content-type:text/html;charset=utf-8" ...

  3. PHP获取某年第几周的开始日期和结束日期

    http://blog.csdn.net/qq_27080247/article/details/50835956 /** * 获取某年第几周的开始日期和结束日期 * @param int $year ...

  4. PHP 获取某年第几周的开始日期和结束日期的实例

    /** * 获取某年第几周的开始日期和结束日期 * @param int $year * @param int $week 第几周; */ public function weekday($year, ...

  5. JAVA获取当前日期时间所在周的周一和周日日期

    /** * 获取当前时间所在周的周一和周日的日期时间 * @return */ public static Map<String,String> getWeekDate() { Map&l ...

  6. PHP获取一年有几周以及每周开始日期和结束日期

    最近接了一个项目,其中有一需求是用php获取一年有几周以及每周开始日期和接触日期.在网上找些资料没有合适的,于是自己做了一份,下面通过两种方式实现PHP获取一年有几周以及每周开始日期和结束日期 代码一 ...

  7. C#关于日期 月 天数 和一年有多少周及根据某年某周获取时间段的计算(转)

    /// 当前月有多少天 /// </summary> /// <param name="y"></param> /// <param na ...

  8. java获取一年的周数和间隔天数

    java获取一年的周数和间隔天数 import java.text.ParseException; import java.text.SimpleDateFormat; import java.uti ...

  9. C#一年中有多少周方法和js一年中第几周

    最近在做一个时间插件,用的是jquery-daterangepicker ,现在分享一下查询时间是一年中的第几周的js方法  和 一年中有多少周的C#后台方法,默认是按照周一为一周的开始,如果一年的第 ...

随机推荐

  1. spring扩展点之五:ApplicationContextInitializer实现与使用

    ApplicationContextInitializer是Spring框架原有的东西,这个类的主要作用就是在ConfigurableApplicationContext类型(或者子类型)的Appli ...

  2. ipv4的ip字符串转化为int型

    要求: 将现有一个ipv4的ip字符串(仅包含数字,点,空格), 其中数字和点之间的空格(至多一个)是合法的,比如“12 .3. 4 .62”,其他情况均为非法地址.写一个函数将ipv4地址字符串转化 ...

  3. Spark Core知识点复习-2

    day1112 1.spark core复习 任务提交 缓存 checkPoint 自定义排序 自定义分区器 自定义累加器 广播变量 Spark Shuffle过程 SparkSQL 一. Spark ...

  4. count和distinct

    一.count和distinct count是统计数据条数,distinct是去掉重复列: count统计的时候会忽略null值,distinct会将重复的null值列作为一个. 综上select c ...

  5. - 集合 遍历 foreach Iterator 并发修改 ConcurrentModificationException MD

    目录 目录 为什么不能在 foreach 循环里进行元素的 remove/add 操作 背景 foreach 循环 问题重现 fail-fast remove/add 做了什么 正确姿势 直接使用普通 ...

  6. spring cloud应用

    1.什么是注册中心 (1)就是首先有一个eureka server,服务的注册与发现的中心(2)你如果写好了一个服务,就可以将其注册到eureka server上去(3)然后别人的服务如果要调用你的服 ...

  7. typescript nodejs 依赖注入实现

    依赖注入通常也是我们所说的ioc模式,今天分享的是用typescript语言实现的ioc模式,这边用到的主要组件是 reflect-metadata 这个组件可以获取或者设置元数据信息,它的作用是拿到 ...

  8. 2d图片依次排列在屏幕中间(SpriteRenderer)

    如图所示: C#代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public cl ...

  9. 详细的Hadoop的入门教程-伪分布模式Pseudo-Distributed Operation

    一. 伪分布模式Pseudo-Distributed Operation 这里关于VM虚拟机的安装就不再介绍了,详细请看<VMware虚拟机的三种网络管理模式>一章介绍.这章只介绍hado ...

  10. OpenGL 中的三维纹理操作

    #define _CRT_SECURE_NO_WARNINGS #include <gl/glut.h> #include <stdio.h> #include <std ...