我在本周收到星期一的日期时遇到问题。
echo date('Y-m-d',strtotime('monday this week'));
当我在我的本地计算机(PHP 5.3)上运行上面的代码时,它正确输出'2011-03-07',但我服务器上的相同代码(PHP 5.2)输出'2011-03-14'(那是下周一的星期一。)
我试图在两台机器上运行日期('W'),我得到相同的结果(10)。
编辑:任何想法如何正常工作?
提前致谢。
答案 0 :(得分:8)
使用
date('Y-m-d',strtotime(date('o-\\WW')));
答案 1 :(得分:5)
不是我已经看到了这个问题,但我看到的非常相似。 strtotime似乎改变了不同版本的PHP之间的行为,并且除了简单的操作(例如'+1周'),很难保证功能保持不变。
如果你无法升级到5.3,正如所指出的那样,似乎是一种改进,我所能推荐的,就是在玩一些排列。通过改写问题,通常可以从旧版本的strtotime中获得正确的答案。示例可能包括......
答案 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");