2015-05-07 2 views
2

я получил два DateTime объекты, такие как следующий (вывод print_r):Добавление DateInterval в день к DateTime объекта добавляет два дня

DateTime Object 
(
    [date] => 2015-04-01 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 
DateTime Object 
(
    [date] => 2015-04-01 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 

Затем добавить DateInterval как

$step = new DateInterval('P1D'); 
$startPointer->add($step); 
$endPointer->add($step); 

Теперь я получил

DateTime Object 
(
    [date] => 2015-04-03 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 
DateTime Object 
(
    [date] => 2015-04-03 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 

Почему PHP добавил 2 дня вместо 1?

+1

[Пример № 3: остерегайтесь добавления месяцев] (http://php.net/manual/en/datetime.add.php) – Ghost

+0

Он не добавляет несколько месяцев, кроме дней. И выше код возвращает [date] => 2015-04-02 00: 00: 00.000000 для меня. – krzysiej

+0

Нравится этот https://eval.in/333030 – krzysiej

ответ

0

Он также возвращает мне второе апреля. Несмотря на то, что мы говорим о 1 апреля, я полагаю, что вы не клонировали объект Date, но ссылались на него второй раз. Таким образом, startPoint и endPoint фактически являются одними и теми же объектами. Вызов add() для каждого из них заставляет PHP добавить один день дважды к одному и тому же объекту.

Возможно, это так?

+0

Это была ТОЧНО моя проблема. Большое спасибо. –

Смежные вопросы