提问者:小点点

PHP Datetime`nextweek周三`给我周一


我正在尝试使用new\DateTime(“下周星期三”)获取下周的星期三日期。但是,它返回的是星期一的2016-12-19 00:00:00.000000。为什么会这样?如何得到正确的结果?

我试图在PHP沙箱中在线复制它,但它返回了正确的结果http://sandbox.onlinephpfunctions.com/code/7ab99fcfeffedc1ad01d7de9ed236ac273fe1bb3这可能取决于我的环境吗?

PHP7.0。11(cli)(创建日期:2016年10月2日00:32:59)(NTS)版权所有(c)1997-2016 PHP Group Zend Engine v3。0.0,版权所有(c)1998-2016 Zend Technologies与Xdebug v2。4.0,版权所有(c)2002-2016,作者:德里克·雷特汉斯


共2个答案

匿名用户

这似乎是一个错误(可能这个只发生在周日):

<?php

var_dump(new \DateTime('Wednesday next week'));

PHP版本5.6。23至5.6。29和7.0。8至7.1。0输出12月19日(星期一),而PHP版本为5.0至5.6。22和7.0。0到7.0。7返回12月28日(星期三)。

我在PHP 5.6.23或7.0.8的更改日志条目中没有看到任何相关更改。

匿名用户

我在这里得到了同样的结果,实际上似乎是一个“下周”的事情:

$date = new \DateTime('next week wednesday');
print_r($date);

DateTime Object
(
    [date] => 2016-12-19 00:00:00.000000
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

重写似乎工作,取决于你想要什么:

$date = new \DateTime('wednesday');
print_r($date);

DateTime Object
(
    [date] => 2016-12-21 00:00:00.000000
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

或者

$date = new \DateTime('wednesday');
$date->add(new \DateInterval('P1W'));
print_r($date);

DateTime Object
(
    [date] => 2016-12-28 00:00:00.000000
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)