我在获取本周的星期一日期时遇到问题。
echo date('Y-m-d',strtotime('monday this week'));
当我在本地机器(PHP 5.3)上运行上述代码时,它正确输出“2011-03-07”,但我的服务器(PHP 5.2)上的相同代码输出“2011-03-14”(下一个星期一星期)。
我尝试在两台机器上运行 date('W') 并得到相同的结果 (10)。
编辑:任何想法如何让这项工作正常?
提前致谢。
利用
date('Y-m-d',strtotime(date('o-\\WW')));
并不是说我已经看到了这个问题,而是我看到了非常相似的问题。strtotime 似乎改变了不同版本的 PHP 之间的行为,并且除了简单的操作(例如“+1 周”),很难保证功能将保持不变。
如果您无法升级到 5.3,正如正确指出的那样,这似乎是一种改进,我只能建议您使用一些排列。通过重新表述问题,通常可以从旧版本的 strtotime 中得到正确答案。示例可能包括...
是的,strtotime 中的字符串解释在 5.3 中得到了显着改进。
从服务器和本地桌面上的 cli 提示符运行命令“date”。这将验证操作系统是否在两个系统上看到相同的日期。
你有两个选择:要么避免使用这个检查日期是否在未来的功能,如果是,你将它减少 7 天。欢迎来到 PHP 的奇妙世界。
看这个:
“请注意,您不能仅依靠此功能来验证日期,因为它会接受像 2 月 31 日这样的疯狂日期。
此外,“...周”功能本身可能无法达到您的预期。如果在星期日使用,'next week' 将不会返回下星期一的时间戳,而是返回之后的星期一的时间戳。类似地,当使用'previous/last week'时,返回当前周星期一的时间戳,而'this week'返回下周星期一(即下一天)的时间戳。这不是‘星期从星期天开始’的效果,因为这意味着所有返回的时间戳都必须是星期天,而没有一个是星期天。”
Ff 今天是星期天,你会错的。
这是另一种可行的解决方案(实际上是唯一对我有用的解决方案):
$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24));
$today = strtotime('This week monday 8 am');
echo $this->unix_timestamp_to_human($today,"D M j G:i:s T Y");