php中有的时候想获取某周的开始和结束日期,不是很方便,于是自己收拾了一套。
/**
* 日期转换成中国式的周一和周日,num=-1默认返回本周周一和周日的日期
* 0表示上周 1表示上上周
* -2表示下周 -3表示下下周
* 以此类推
*/
public static function dealDate($num = -1)
{
$date = date('Y-m-d'); //当前日期
$first = 1; //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
$w = date('w', strtotime($date)); //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$now_start = date('Y-m-d', strtotime("$date -".($w ? $w - $first : 6).' days'));
$now_end = date('Y-m-d', strtotime("$now_start + 6 days"));
if ($num == -1)
{
return ['start' => $now_start, 'end' => $now_end];
}
$start_num = $end_num = $deal_num = 0;
//下周、下下周以此类推
if ($num < 0)
{
$deal_num = (abs($num) - 1) * 7;
$next_start = date('Y-m-d', strtotime("$now_start + $deal_num days"));
$next_end = date('Y-m-d', strtotime("$now_end + $deal_num days"));
return ['start' => $next_start, 'end' => $next_end];
}
//上周、上上周,以此类推
$start_num = 7 + $num * 7;
$end_num = 1 + $num * 7;
//上周开始日期 7=7 + 0*7, 上上周14=7 + 1*7
$start = date('Y-m-d', strtotime("$now_start - $start_num days"));
//上周结束日期 1=1 + 0*7, 上上周8=1 + 1 * 7
$end = date('Y-m-d', strtotime("$now_start - $end_num days"));
return ['start' => $start, 'end' => $end];
}
本月的第一天: $s_time = date('Y-m-01');
本月的最后一天: $e_time = date('Y-m-d', strtotime("$s_time +1 month -1 day"));