后端开发 \ PHP \ php获取指定日期的一周开始及结束日期,支持一周是从周几开始

php获取指定日期的一周开始及结束日期,支持一周是从周几开始

总点击20
简介:因工作需要,需要获取周四开始一周的开始结束日期,而php没有提供获取本周开始及结束日期的方法,因此写了一个方法方便以后使用。

因工作需要,需要获取周四开始一周的开始结束日期,而php没有提供获取本周开始及结束日期的方法,因此写了一个方法方便以后使用。

计算方法:

<?php

/**

* 计算指定日期的一周开始及结束日期

* @param DateTime $date 日期

* @param Int $start 周几作为一周的开始 1-6为周一~周六,0为周日,默认0

* @retrun Array

*/

function getWeekRange($date,$start=0){

// 将日期转时间戳

$dt = new DateTime($date);

$timestamp = $dt->format('U');

// 获取日期是周几

$day = (new DateTime('@'.$timestamp))->format('w');

// 计算开始日期

if($day>=$start){

$startdate_timestamp = mktime(0,date('m',$timestamp),date('d',$timestamp)-($day-$start),date('Y',$timestamp));

}elseif($day<$start){

$startdate_timestamp = mktime(0,$timestamp)-7+$start-$day,$timestamp));

}

// 结束日期=开始日期+6

$enddate_timestamp = mktime(0,$startdate_timestamp),$startdate_timestamp)+6,$startdate_timestamp));

$startdate = (new DateTime('@'.$startdate_timestamp))->format('Y-m-d');

$enddate = (new DateTime('@'.$enddate_timestamp))->format('Y-m-d');

return array($startdate,$enddate);

}

?>

实例:测试分别以周一至周日为开始计算日期的一周开始及结束时间

<?php

$date = '2016-04-27';

for($start=0; $start<=6; $start++){

list($startdate,$enddate) = getWeekRange($date,$start);

echo 'date:'.$date.' week start:'.$start.' range:'.$startdate.','.$enddate.'<br>';

}

?>

输出:

date:2016-04-27 week start:0 range:2016-04-24,2016-04-30

date:2016-04-27 week start:1 range:2016-04-25,2016-05-01

date:2016-04-27 week start:2 range:2016-04-26,2016-05-02

date:2016-04-27 week start:3 range:2016-04-27,2016-05-03

date:2016-04-27 week start:4 range:2016-04-21,2016-04-27

date:2016-04-27 week start:5 range:2016-04-22,2016-04-28

date:2016-04-27 week start:6 range:2016-04-23,2016-04-29

意见反馈 常见问题 官方微信 返回顶部