上周一 - 周日的日期:有更好的方法吗?

Sto*_*ped 15 php mysql datetime

我正准备查询mySQL以获取前一周的记录,但我必须将周视为周一至周日.我原来是这样做的:

WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))
Run Code Online (Sandbox Code Playgroud)

发现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')));
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:有更好的方法吗?看起来很草率,我希望那里有人可以给我一个更干净的方法 - 或许不是因为我需要周一 - 周日周.

编辑

显然,有:

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

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

mar*_*vin 32

你可以使用strtotime来处理这类日期问题

echo strtotime("last Monday");
Run Code Online (Sandbox Code Playgroud)

  • `echo date('Ym-d',strtotime('last monday -7 days'));`令人难以置信. (3认同)
  • 它应该是“上周星期一”,上星期一将返回本周的星期一。 (2认同)

小智 10

(在marvin和Stomped上补充)你也可以这样使用它

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
Run Code Online (Sandbox Code Playgroud)


Win*_*ton 6

strtotime("previous week Monday")
Run Code Online (Sandbox Code Playgroud)

前一周的星期一。