PHP strtotime - 获得下一个最接近的“本月第二个星期日”

时间:2011-02-24 15:41:19

标签: php

我正在尝试获取下一个“本月第二个星期日”的时间戳,无论是当月还是下个月

要求是使用strtotime功能,只使用一次,没有第二个参数,仅此一项(这些约束来自遗留代码)。
基本上,获取它的PHP代码必须是:

strtotime('_a_string_here_');

字符串必须是通用字符串。它不能包含“feb 2011”之类的东西 基本上我可以删除一个静态字符串作为strtotime函数的第一个参数。

我已经尝试了所有这些,但他们没有给我我想要的东西(现在的日期是星期四2011-02-24):
strtotime('second sunday') //它返回'2011-03-06 00:00:00'
strtotime('second sunday of the month ') // 1970-01-01 00:00:00
strtotime('+0 month second sun') //它返回'2011-03-06 00:00:00'

谢谢,

6 个答案:

答案 0 :(得分:5)

试试这个:

strtotime('+2 week Sunday')

<击>

新答案:  我认为你期待strtotime过于聪明。通过不在字符串中提供月份或第二个参数,它只能假定为“当前时间”。

如果不是“过去的第二个星期日,或者下个月的第二个星期日”,那么对“条件”没有任何支持。

IMO将这样的东西添加到strtotime会使它太复杂而无法在正常操作中使用。正确的解决方案很可能是对strtotime进行两次调用(第一次查看当前月份是否已经过去,第二次仅在我们需要下个月时)。

我不知道为什么你的约束存在,但你应该开始弄清楚如何改变约束。

答案 1 :(得分:1)

// second sun next month
strtotime('+0 month +2 week sun');

答案 2 :(得分:1)

有关“下个月问题”的讨论,请检查http://derickrethans.nl/obtaining-the-next-month-in-php.html

答案 3 :(得分:1)

要解决这个问题,您只需要规范化到当月的第一天。所以说你想要三月的第二个星期日用于夏令时。

date('m/d/Y',strtotime('03/01/2011 second sunday'));

或更一般地

date('m/d/Y',strtotime('03/01'.date('Y').' second sunday'));

希望这有帮助。

答案 4 :(得分:1)

这些建议都不适合我。

这是做了什么:

date('m/d/Y', strtotime('Second Sunday Of March 2015'));

答案 5 :(得分:0)

您尝试过吗?

strtotime('second sunday of this month');