Datetime-> modify('second thursday')无法正常工作

时间:2013-08-07 05:43:17

标签: php datetime

我想从约会时间开始第二个星期四。

代码

 $test = new DateTime('2013-08-02 10:00');
 echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');

上述代码返回2013-08-15 10:00而不是2013-08-08 10:00

但是当我使用以下代码时,它可以正常工作

 $test = new DateTime('2013-08-02 10:00');
 echo $test->modify('second wednesday'.$test->format('H:i'))->format('Y-m-d H:i');

4 个答案:

答案 0 :(得分:1)

2013-August月的第一天是Thursday

代码中存在错误,如果第一天是Thursday,则第一天Thursday将在下周发生,即8-August,明智的第二天second Thursday将来15-August

此代码将有所帮助

echo date('Y-m-d', strtotime('second thursday of august 2013'));

更新代码

 $test = new DateTime('2013-08-02 10:00');
echo date('Y-m-d', strtotime("second thursday of august 2013")).' '.$test->format('H:i');

RC

添加

<强> From PHP strtotime manual page

  

在5.2.7之前的PHP 5中,请求给定的给定事件   一个月的工作日,那个工作日是这个月的第一天   会错误地将一周添加到返回的时间戳。这有   已在5.2.7及更高版本中得到纠正。

答案 1 :(得分:0)

试试这个,

echo date('Y-m-d', strtotime('second thursday of august 2013'));

答案 2 :(得分:0)

试试这个。我已经检查过,它会显示你想要的结果。

$test = new DateTime('2013-08-00 10:00');
echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');

答案 3 :(得分:0)

$test = new DateTime('2013-08-02 10:00');
echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');

'第二个星期四'是指当前日期之后的第二个星期四。所以预期的结果是2013-08-15。如果你想要给定月份的第二个星期四,你可以这样指定:

$test = new DateTime('2013-08-02 10:00');
echo $test->modify('second thursday of this month '.$test->format('H:i'))->format('Y-m-d H:i');

请注意,“本月”是指当前存储在DateTime对象中的日期,而不是代码执行日期。