#php #datetime
#php #datetime
Вопрос:
Я хочу получить дату с определенным днем и временем в PHP, например, я хочу дату следующего дня и время 9.30 утра, т. е. «2011-06-02 09:30:00». код, который я использовал, позволяет сделать это,
<?php
$next_day_date = date("Y")."-".date("m")."-".(date("d") 1)." 09:30:00";
$new_trig_time_stamp = strtotime($next_day_date);
$trigger_date_time = date("Y-m-d H:i:s",$new_trig_time_stamp);
echo $trigger_date_time;
?>
приведенный выше код работает нормально, но на 31-й день происходит сбой, 31-го числа он возвращает «1970-01-01 05:30:00».
Есть ли какой-либо другой способ сделать это.
Ответ №1:
При сдвиге дат на фиксированное число лучше использовать mktime()
, потому что он хорошо обрабатывает недопустимые даты (например, он знает, что 32 января на самом деле является 1 февраля)
$trigger_date_time = date("Y-m-d H:i:s", mktime(9,30,0, date('n'), date('j') 1, date('Y'));
Ответ №2:
strtotime()
здесь очень полезно.
$trigger_date_time = date( "Y-m-d H:i:s", strtotime( "tomorrow 9:30" ) );
Комментарии:
1. Однако это не обязательно завтра. Следующие 09: 30 могут наступить через несколько минут, и в этом случае это решение даст неверный ответ.
Ответ №3:
Вычислите ее с помощью метки времени unix — гораздо меньше хлопот
<?php
$trigger_date_time = date("Y-m-d 09:30:00",time() 60*60*24);
echo $trigger_date_time;
?>
Комментарии:
1. да, это сработало, даже пытались 31 мая. это сработало … спасибо! strtotime () создавал проблему в моем случае.
2. Это решение с ручной настройкой секунды не сработало бы, если бы часы сдвигались из-за летнего времени (один раз в год это давало бы опоздание на 1 час, а один раз — на 1 час раньше).
3. Если точность решения указана в днях, час не имеет значения
Ответ №4:
echo date('Y-m-d', strtotime(' 1 day')) . ' 09:30:30';
Комментарии:
1. Если бы мне пришлось угадывать, я бы сказал, что это потому, что в коде нет объяснения.
2. И почему другие получили downvotes? (Я думаю, что все получили одновременно)
Ответ №5:
Взгляните на date_add
.
Более подробно, что-то вроде…
$myDate = new DateTime("Some time");
$myDate->add(new DateInterval("P1D"));
Затем вы можете использовать $myDate->format(…)
для извлечения форматированных представлений.