PHP Datetime`下周星期三`给我星期一

时间:2016-12-18 22:06:17

标签: php date datetime

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

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

我在OSX上运行PHP 7

  

PHP 7.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,Derick Rethans

enter image description here

2 个答案:

答案 0 :(得分:5)

appears to be a bug(可能this one仅在星期日发生):

<?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的更改日志条目中看到任何相关更改。

答案 1 :(得分:0)

我在这里得到的结果相同,下周确实似乎是一个&#39;啄:

$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
)