Почему PHP DateTime :: setTime вызывает странное поведение strtotime? - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь перенести дату на несколько раз и исправить ее.Я не могу найти причину, по которой дата не хочет меняться после \ DateTime :: setTime.

$now = new \DateTime();

$nextFriday = new \DateTime('@' . strtotime('next friday', $now->getTimestamp()));

Я получаю: 2019-03-21 23: 00: 00.0 +00: 00

$nextFriday->setTime(12, 30);

Я получаю: 2019-03-21 12: 30: 00.0 +00: 00

$nextNextFriday = new \DateTime('@' . strtotime('next friday', $nextFriday->getTimestamp()));

А теперь, что происходит:

2019-03-21 23: 00: 00.0 +00: 00

1 Ответ

4 голосов
/ 15 марта 2019

Я полагаю, что причина сброса времени в том, что относительный модификатор даты PHP 'next ...' всегда сбрасывает время на «начало следующего ...».

Почему вы получаете 23:00:00+00:00вероятно, из-за разных часовых поясов, установленных на сервере против вашей системы (при условии локальной разработки).

Если вам нужно перейти относительно даты использования:

<?php

$now = new \DateTime();

$nextFriday = clone $now;

$nextFriday->modify('next friday');
// also here time will be 00:00:00

$nextFriday->setTime(12,30);

var_dump($nextFriday);
// "2019-03-22 12:30:00.000000"
...