PHP strtotime() “二月第一个星期一”如果 2 月 1 日是星期一,则返回第二个星期一

发布于 2024-12-09 18:04:48 字数 458 浏览 1 评论 0原文

我正在开发一个计算假期的 PHP 函数:

function holidays($country = 1, $timespan_start = 0, $timespan_end = 0)

假期以数组中的时间戳形式返回。

由于我必须计算诸如二月第一个星期一之类的日期,因此我尝试了 strtotime("first monday february $year") 并且我发现这对于 2010 年不起作用,因为自 02/01/ 2010 年是星期一 - 我得到的是 2 月 8 日。

这个bug实际上在变更日志中提到过: 在 5.2.7 之前的 PHP 5 中,请求某个月份中某个给定工作日的给定出现(该工作日是该月的第一天)会错误地将一周添加到返回的时间戳中。这已在 5.2.7 及更高版本中得到纠正。

但我使用的是 PHP 5.3.8。 为什么我会遇到这个错误?

I'm working on a PHP function which calculates holidays:

function holidays($country = 1, $timespan_start = 0, $timespan_end = 0)

The holidays are returned as timestamps in an array.

Since I have to calculate dates like the first Monday of February, I tried strtotime("first monday february $year") and I've discovered that this does not work for 2010, since 02/01/2010 is a Monday - I get February 8th instead.

This bug is actually mentioned in the change log:
In PHP 5 prior to 5.2.7, requesting a given occurrence of a given weekday in a month where that weekday was the first day of the month would incorrectly add one week to the returned timestamp. This has been corrected in 5.2.7 and later versions.

But I'm using PHP 5.3.8.
Why am I experiencing this error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

涫野音 2024-12-16 18:04:48

看起来您只是缺少一个“of”:

echo date('Y-m-d', strtotime('first monday of february 2010'));

将给出预期结果。有关各种输入格式,请参阅相对日期 PHP 手册

Looks like you are just missing an "of":

echo date('Y-m-d', strtotime('first monday of february 2010'));

will give the expected result. See the PHP Manual on Relative dates for the various input formats.

悲凉≈ 2024-12-16 18:04:48

根据您的 PHP 版本,“of”语句可能有效,也可能无效。作为另一个解决方案,请尝试:

echo date('Ymd',strtotime('monday February 2010'));

将返回 2010 年 2 月的第一个星期一。也适用于所有日期。

Depending on your version of PHP the 'of' statement may or may not work. As another solution try:

echo date('Y-m-d',strtotime('monday February 2010'));

will return the first monday of February 2010. Works for all days as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文