@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
  • Вопрос задан
  • 57 просмотров
Решения вопроса 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'. Соответственно, день и месяц у вас меняются местами.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ЭР-Телеком Пермь
от 80 000 ₽
ЧИТАЙ-ГОРОД Москва
от 140 000 до 210 000 ₽
DANYCOM Краснодар
от 50 000 до 100 000 ₽
06 апр. 2020, в 14:44
5000 руб./за проект
06 апр. 2020, в 14:14
10000 руб./за проект
06 апр. 2020, в 14:11
500 руб./в час