我有一个问题,就是如何获取本周星期一的日期。
echo date('Y-m-d',strtotime('monday this week'));
当我在本地机器(PHP 5.3)上运行上述代码时,它会正确输出 '2011-03-07',但是在我的服务器上(PHP 5.2),输出的是 '2011-03-14'(也就是下周一)。
我尝试在两台机器上运行 date('W') 并得到了相同的结果(10)。
编辑:有什么想法可以使这个代码正确运行?
提前致谢。
我有一个问题,就是如何获取本周星期一的日期。
echo date('Y-m-d',strtotime('monday this week'));
Use
date('Y-m-d',strtotime(date('o-\\WW')));
虽然我没有看到过这个问题,但我见过非常相似的问题。strtotime函数在不同版本的PHP中会改变行为,除了简单的操作(例如'+1 week')之外,很难保证功能将保持不变。
如果您无法升级到5.3版本,正如正确指出的那样,我所能建议的就是尝试一些排列组合。通过重新构造问题,通常可以从旧版本的strtotime函数中得到正确的答案。例如...
是的,在5.3中,strtotime对字符串的解释得到了显著改进。
这里有另一个可行的解决方案(实际上是唯一一个对我有效的):
$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24));
看这个:
“请注意,您不能仅依靠此函数来验证日期的有效性,因为它将接受像2月31日这样不合理的日期。
此外,'... week'功能本身可能无法按预期工作。如果在星期天使用,则'下周'将不会返回下一个星期一的时间戳,而是下下个星期一的时间戳。同样,当使用'上周/上一个星期'时,将返回当前星期一的时间戳,并且'本周'返回下一周星期一的时间戳(即第二天)。这不是“星期从星期日开始”的效果,因为那意味着所有返回的时间戳都必须在星期日,但实际上并非如此。”
如果今天是星期日,你就会错了。
$today = strtotime('This week monday 8 am');
echo $this->unix_timestamp_to_human($today,"D M j G:i:s T Y");