Как получить следующую дату с определенным временем в PHP

#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(…) для извлечения форматированных представлений.