2

我试图从日期时间获得第二个星期四。

代码

 $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

4 回答 4

1

月的第一天2013-AugustThursday

并且代码中存在错误,如果第一天是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添加

来自 PHP strtotime 手册页

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

于 2013-08-07T05:51:16.850 回答
0

尝试这个,

echo date('Y-m-d', strtotime('second thursday of august 2013'));
于 2013-08-07T05:56:09.747 回答
0

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

$test = new DateTime('2013-08-00 10:00');
echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');
于 2013-08-07T05:58:39.623 回答
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 对象中的日期,而不是执行代码的日期。

于 2013-08-07T06:12:49.483 回答