/*PHP获取当前日期是第几周和本周开始日期和本周结束日期*/
//$now = '2018-11-13';周二
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;

返回值:

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

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

 /**
* 获取一年每周的开始日期和结束日期
* @param $year
* @return mixed
*/
public static function get_week($year)
{
$year_start = $year . "-01-01";
$year_end = $year . "-12-31";
$startday = strtotime($year_start);
if (intval(date('N', $startday)) != '1') {
$startday = strtotime("next monday", strtotime($year_start)); //获取年第一周的日期
}
$year_mondy = date("Y-m-d", $startday); //获取年第一周的日期 $endday = strtotime($year_end);
if (intval(date('W', $endday)) == '7') {
$endday = strtotime("last sunday", strtotime($year_end));
} //$num = intval(date('W', $endday));可以获取当年以前的年份有多少周,如果是当年还没到12-31号$num为1
  $num = 52;//一年约52周
for ($i = 1; $i <= $num; $i++) {
$j = $i - 1;
$start_date = date("Y-m-d", strtotime("$year_mondy $j week ")); $end_day = date("Y-m-d", strtotime("$start_date +6 day")); $week_array[$i] = array(
$start_date, $end_day);
}
return $week_array;
}

返回值:共52周

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

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

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

 function get_week_all($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_list[$key]['num'] = $value;
$week = $this->get_year_month_week($year, $value);//一周的日期
$week_list[$key]['detail'] = "第" . $value . "周(" . $week[0] . "至" . $week[6] . ")";
}
return $week_list;
}
 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;
}
 function get_year_month_week($year, $value)
{
//指定年和周的日期数组
$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;

得到结果:

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

 //PHP计算两个日期的差值
$sdate = new DateTime("1949-10-01");
$edate = new DateTime();
$interval = $sdate->diff($edate);
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. 【题解】Editor [HDU4699]

    [题解]Editor [HDU4699] 传送: \(Editor\) \([HDU4699]\) [题目描述] 有一个维护整数序列的强大编辑器,初始状态为空,下面提供五种不同的操作,给出的总操作次数 ...

  2. centos7安装mysql初始化报错

    [root@localhost bin]# ./mysqld --initialize --user=mysql2019-09-16T06:15:28.835202Z 0 [Warning] TIME ...

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

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

  4. 谨记不要在MySQL中使用“utf8”编码

    掉坑回顾: 最近在工作中遇到一个BUG,用于记录客户昵称的数据表,在插入带有表情的字符时候报错.使用的存储引擎是INNODB,当我查看数据库字段的时候确实是设置的utf8,我传入的字符也是utf8的编 ...

  5. 给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)

    先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的 ...

  6. 6、VUE指令

    1.指令的格式 1.1. 指令的概念 指令是指带有v-前缀的特殊属性,指令的职责是当其表达式的值改变时,相应的将某些行为应用到DOM上. 1.2. 指令必须是html的属性 指令只能以带前缀的html ...

  7. 关于Svn服务总是链接异常

    之前一直在使用,本机电脑也没有修改网络环境却一直无法链接svn. 每次剪切代码都提示: ping服务ip可以ping通,域名却总是不通. 百度结果各种clear缓存,还不行 结果使用 在本地C:\Wi ...

  8. 在.Net Core中使用Swagger制作接口文档

    在实际开发过程中后台开发人员与前端(移动端)接口的交流会很频繁.所以需要一个简单的接口文档让双方可以快速定位到问题所在. Swagger可以当接口调试工具也可以作为简单的接口文档使用. 在传统的asp ...

  9. 腕表wacche英语wacche手表

    watch As a noun, from Middle English wacche, Etymology As a noun, from Middle English wacche,See bel ...

  10. 7 静态分析Android

    静态分析两种方式: 1. 阅读反汇编的Dalvik字节码:使用IDA 分析dex文件或baksmali反编译的smali文件 2. 阅读反汇编的Java源码:使用dex2jar生成jar文件,用jd- ...