PHP strtotime()本周一的星期一不同结果

时间:2011-03-09 15:18:41

标签: php strtotime

我在本周收到星期一的日期时遇到问题。

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

当我在我的本地计算机(PHP 5.3)上运行上面的代码时,它正确输出'2011-03-07',但我服务器上的相同代码(PHP 5.2)输出'2011-03-14'(那是下周一的星期一。)

我试图在两台机器上运行日期('W'),我得到相同的结果(10)。

编辑:任何想法如何正常工作?

提前致谢。

8 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

不是我已经看到了这个问题,但我看到的非常相似。 strtotime似乎改变了不同版本的PHP之间的行为,并且除了简单的操作(例如'+1周'),很难保证功能保持不变。

如果你无法升级到5.3,正如所指出的那样,似乎是一种改进,我所能推荐的,就是在玩一些排列。通过改写问题,通常可以从旧版本的strtotime中获得正确的答案。示例可能包括......

  • 下周一 - 1周
  • 上周一+1周
  • 这个星期一

答案 2 :(得分:3)

是的,在strtotime中对字符串的解释在5.3中有显着改善。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你有两个选择:要么避免使用这个检查功能,如果日期是将来,如果是的话,你可以在7天内完成。欢迎来到PHP的wolderful世界。

答案 5 :(得分:0)

看看这个:

“请注意,您不能单独依靠此功能来验证日期,因为它会接受像2月31日这样的疯狂日期。

此外,“...周”功能本身可能无法达到预期效果。如果在星期日使用,“下周”将不会返回下周一的时间戳,而是在此之后的星期一。类似地,当使用“上一周/上周”并且“本周”返回下周(即第二天)的星期一的戳记时,返回当前星期一的星期一的时间戳。这不是'星期日开始的星期'效果,因为这意味着返回的所有时间戳都必须在星期日,而且没有一个。“

今天Ff是星期天,你会错的。

答案 6 :(得分:0)

这是另一个有效的解决方案(实际上是唯一适合我的解决方案):

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

答案 7 :(得分:0)

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