PHP strtotime()函数在本周的星期一返回不同的结果

8

我有一个问题,就是如何获取本周星期一的日期。

echo date('Y-m-d',strtotime('monday this week'));

当我在本地机器(PHP 5.3)上运行上述代码时,它会正确输出 '2011-03-07',但是在我的服务器上(PHP 5.2),输出的是 '2011-03-14'(也就是下周一)。
我尝试在两台机器上运行 date('W') 并得到了相同的结果(10)。
编辑:有什么想法可以使这个代码正确运行?
提前致谢。

1
唯一的假设是,也许你定义一周的开始不同... - Mikhail
3
请将您的服务器日期设置为正确。 - Shakti Singh
8个回答

8

Use date('Y-m-d',strtotime(date('o-\\WW')));


1
救命稻草。特别是如果您无法升级到php 5.3。 - Avatar

5

虽然我没有看到过这个问题,但我见过非常相似的问题。strtotime函数在不同版本的PHP中会改变行为,除了简单的操作(例如'+1 week')之外,很难保证功能将保持不变。

如果您无法升级到5.3版本,正如正确指出的那样,我所能建议的就是尝试一些排列组合。通过重新构造问题,通常可以从旧版本的strtotime函数中得到正确的答案。例如...

  • 下周一 -1 周
  • 上周一 +1 周
  • 本周一

3

是的,在5.3中,strtotime对字符串的解释得到了显著改进。


0

这里有另一个可行的解决方案(实际上是唯一一个对我有效的):

$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24));

非常抱歉回复晚了,但对于像我这样看到这个问题的其他人来说,这并不是夏令时证明。在新西兰2018年9月30日之前的48小时是2018年9月27日,而不是28日。使用带有“-x天”的strtotime会更好。 - SpoonNZ

0
在服务器和本地桌面上的cli提示符下运行“date”命令。这将验证操作系统是否在两个系统上看到相同的日期。

0
你有两个选择:要么避免使用这个函数,要么检查日期是否在未来,如果是,则将其减少7天。欢迎来到 PHP 的精彩世界。

0

看这个:

“请注意,您不能仅依靠此函数来验证日期的有效性,因为它将接受像2月31日这样不合理的日期。

此外,'... week'功能本身可能无法按预期工作。如果在星期天使用,则'下周'将不会返回下一个星期一的时间戳,而是下下个星期一的时间戳。同样,当使用'上周/上一个星期'时,将返回当前星期一的时间戳,并且'本周'返回下一周星期一的时间戳(即第二天)。这不是“星期从星期日开始”的效果,因为那意味着所有返回的时间戳都必须在星期日,但实际上并非如此。”

如果今天是星期日,你就会错了。


0
$today = strtotime('This week monday 8 am');
echo $this->unix_timestamp_to_human($today,"D M j G:i:s T Y");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接