获取上周一 - 周日的日期:有没有更好的方法?

2022-08-30 22:43:00

我正在为mySQL准备一个查询,以获取前一周的记录,但我必须将周视为周一至周日。我最初这样做:

WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))

发现mySQL将周视为星期日 - 星期一。因此,我正在解析php中的开始和结束日期,如下所示:

$i = 0; 
while(date('D',mktime(0,0,0,date('m'), date('d')-$i, date('y'))) != "Mon") { 
  $i++; 
}

$start_date = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+7), date('y')));
$end_date  = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+1), date('y')));

这有效 - 它获取当前星期一的日期(向后走,直到星期一被击中),然后根据该日期计算前一周的日期。

我的问题是:有没有更好的方法来做到这一点?只是看起来很草率,我希望有人能给我一个更干净的方式来做到这一点 - 或者也许不是因为我需要周一 - 周日的几周。

编辑

显然,有:

$start = date('Y-m-d',strtotime('last monday -7 days'));
$end   = date('Y-m-d',strtotime('last monday -1 days'));

这大约是可读性的一百万倍。谢谢。


答案 1

你可以使用 strtotime 来解决这种日期问题

echo strtotime("last Monday");

答案 2

(补充马文和踩踏)您也可以通过这种方式使用它

echo date('Y-m-d',strtotime('-1 Monday')); //last Monday
echo date('Y-m-d',strtotime('-2 Monday')); //two Mondays ago
echo date('Y-m-d',strtotime('+1 Monday')); //next Monday

推荐