Возьмите две переменные для даты и времени и объедините их, чтобы сделать одну дату

Я хотел бы взять две переменные: одну, представляющую дату, и другую на время, а затем объединить их, чтобы сделать одну дату.

Затем я хотел бы использовать эту комбинированную дату и время, чтобы проверить, соответствует ли текущая дата и время на 24 часа или меньше от комбинированных дат и времени.

$game_date = $game['date']; $game_time = $game['time']; $combined_date_and_time = date('$game_date $game_time'); 

Чтения $ game_date хранятся так: 03/28/2013

Чтения $ game_time хранятся так: 07:05

На выходе $ combined_date_and_time читается как:

 $2pm03America/Los_Angeles_28pm31America/Los_Angeles $2pm03America/Los_Angeles_313803America/Los_Angeles 

что, конечно, неправильно.

Можно ли объединить их в одну дату, а затем сравнить?

 $game_date = game['date']; $game_time = game['time']; $combined_date_and_time = $game_date . ' ' . $game_time; $past_date = strtotime($combined_date_and_time); $hours = 24; // Check if date is more recent than the specified number of hours if ((time() - $past_date) < (60 * 60 * $hours)) { echo 'Yes!'; } 

Но будь осторожен! Если ваша дата когда-либо хранится в европейском формате ( dd/mm/yyyy ), вам нужно будет изменить порядок до разбора даты, иначе это не сработает.

Если разделитель даты - или . , то предполагается европейский формат.

 if (strpos($game_date, '-') !== false) { list($day, $month, $year) = explode('-', $game_date); $game_date = $month . '/' . $day . '/' . $year; } else if (strpos($game_date, '.') !== false) { list($day, $month, $year) = explode('.', $game_date); $game_date = $month . '/' . $day . '/' . $year; } в if (strpos($game_date, '-') !== false) { list($day, $month, $year) = explode('-', $game_date); $game_date = $month . '/' . $day . '/' . $year; } else if (strpos($game_date, '.') !== false) { list($day, $month, $year) = explode('.', $game_date); $game_date = $month . '/' . $day . '/' . $year; } в if (strpos($game_date, '-') !== false) { list($day, $month, $year) = explode('-', $game_date); $game_date = $month . '/' . $day . '/' . $year; } else if (strpos($game_date, '.') !== false) { list($day, $month, $year) = explode('.', $game_date); $game_date = $month . '/' . $day . '/' . $year; } 

Вышеупомянутый код будет находиться между инициализацией переменных даты и переменной comb_date_and_time.

Используйте strtotime вместо date :

 php > $dt = strtotime("03/28/2013 07:05 pm"); php > echo date("Ymd H:i:s", $dt); 2013-03-28 19:05:00 

(Кроме того, переменные не разворачиваются в строках с одиночными кавычками, вместо них используются двойные кавычки)