PHP:周从星期一开始,但是星期日的"星期一星期一"将在下周一星期一开始

tva*_*anc 36 php datetime

以下是该问题的摘要:星期日,strtotime('this week')返回下周的开始.

在PHP中,本周似乎从星期一开始.但是,除了星期天之外的任何一天,这段代码

echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));
Run Code Online (Sandbox Code Playgroud)

输出本周的星期一的日期,似乎它应该在周一的最后几周输出.看起来,在这种情况下,PHP将星期日和星期一视为本周的开始.现在是2012年12月10日星期一,或2012-12-10.date('Y-m-d', strtotime('sunday last week'))返回2012-12-09- 昨天.

这是一个错误,还是我错过了什么?看起来这个明显的臭虫应该是众所周知的,但我找不到任何关于它的东西.本周开始的唯一方法是在周日使用一些特殊处理方法吗?

$week_offset = (int) 'sunday' == date('l');
$week_start  = strtotime("-$week_offset monday"); // 1 or 0 Mondays ago
Run Code Online (Sandbox Code Playgroud)

tva*_*anc 10

据我所知,这是一个错误.我认为没有合理的理由strtotime('this week');可以归还未来的日期.这是一个非常重要的错误.在我的特定情况下,我有一个排行榜,显示自本周开始以来用户得分最多的用户.但是在星期天,它是空的,因为strtotime返回了未来日期的时间戳.我很怀疑,因为我不知道这怎么会被忽视,但我找不到任何其他关于这个bug的报道.

伙计们,感谢您的所有时间和帮助.

  • 有点晚了,我遇到了同样的问题...你可以通过做'strtotime('下周一-1周')来解决这个问题;`这将总是给你当周的星期一;) (9认同)

Vad*_*zev 6

以下是本周的周一:

echo date("Y-m-d", strtotime(date('o-\\WW')));
Run Code Online (Sandbox Code Playgroud)


Bry*_*ant 6

这个答案很晚,但这是我一直在努力的事情.到目前为止,我尝试的每个解决方案都因某种原因而出现故障.这就是我最终得到的对我有用的东西.(虽然它可能看起来很漂亮,但它至少有效).

$thisMonday =  strtotime('next Monday -1 week', strtotime('this sunday'));
Run Code Online (Sandbox Code Playgroud)