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)。

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

提前致谢。

4

8 回答 8

8

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

于 2012-02-22T10:08:22.313 回答
5

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

如果您无法升级到 5.3,正如正确指出的那样,这似乎是一种改进,我只能建议您使用一些排列。通过重新表述问题,通常可以从旧版本的 strtotime 中得到正确答案。示例可能包括...

  • 下周一-1周
  • 上周一+1周
  • 这个星期一
于 2011-03-09T15:35:33.607 回答
3

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

于 2011-03-09T15:20:01.277 回答
0

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

于 2011-03-09T15:22:44.217 回答
0

你有两个选择:要么避免使用这个检查日期是否在未来的功能,如果是,你将它减少 7 天。欢迎来到 PHP 的奇妙世界。

于 2011-03-09T15:37:31.243 回答
0

看这个:

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

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

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

于 2015-03-31T05:34:20.160 回答
0

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

$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24));
于 2016-01-24T13:46:27.257 回答
0
$today = strtotime('This week monday 8 am');
echo $this->unix_timestamp_to_human($today,"D M j G:i:s T Y");
于 2021-05-27T17:37:19.647 回答