Задать вопрос
@ood1n
Пытаюсь развиться

Почему strtotime вместо одного дня прибавляет целый месяц?

Приветствую! Почему strtotime вместо одного дня прибавляет целый месяц?
echo $time['start'] . '<br><br>';  // Значение: 2019-07-07 10:12:42
                    
 $startTime = strtotime('5 hour', strtotime($time['start'])); // Перевожу из UTC в нужный часовой пояс и получаю TIMESTAMP этого времени. Значение: 1562457600
$startDay = strtotime(date('Y-d-m', $startTime)); // Получаю TIMESTAMP начала этого дня. Значение: 1562512362
$nextDay = strtotime(date('Y-d-m', strtotime('+1 day', $startTime))); // Получаю TIMESTAMP начала следующего дня. Значение: 1565136000  

echo date('Y-d-m H:i:s', $startDay); // 2019-07-07 00:00:00
echo date('Y-d-m H:i:s', $startTime); // 2019-07-07 15:12:42
echo date('Y-d-m H:i:s', $nextDay); // 2019-07-08 00:00:00
  • Вопрос задан
  • 113 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
$nextDay = strtotime(date('Y-d-m', strtotime('+1 day', $startTime)));

Уберите лишние телодвижения.
$nextDay = strtotime('+1 day', $startTime);
Внешний strtotime немного не в курсе что вы поменяли местами месяц и день.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
strtotime использует стандартный формат 'Y-m-d'
$nextDay = strtotime(date('Y-d-m', strtotime('+1 day', $startTime)));

Здесь вы сначала получаете дату в 'Y-d-m', затем распознаёте её как 'Y-m-d'. Соответственно, день и месяц у вас меняются местами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы