Я пытаюсь получить следующую среду в среду, используя new \DateTime('next week wednesday')
. Тем не менее, он возвращает 2016-12-19 00:00:00.000000
который является понедельником. Почему это так? Как получить правильный результат?
Я попытался воспроизвести его в PHP-песочнице онлайн, но там он возвращает правильный результат. Http://sandbox.onlinephpfunctions.com/code/7ab99fcfeffedc1ad01d7de9ed236ac273fe1bb3 Может ли это быть чем-то в зависимости от моей среды?
Я запускаю PHP 7 на OSX
PHP 7.0.11 (cli) (построено: 2 октября 2016 00:32:59) (NTS) Copyright (c) 1997-2016 PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies с Xdebug v2 .4.0, Авторское право (c) 2002-2016 гг., Derick Rethans
Кажется, это ошибка (возможно, это происходит только по воскресеньям):
<?php var_dump(new \DateTime('Wednesday next week'));
PHP версии 5.6.23 – 5.6.29 и 7.0.8 – 7.1.0 вывод 19 декабря (понедельник), в то время как версии PHP с 5.0 до 5.6.22 и от 7.0.0 до 7.0.7 возвращаются 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 )