Intereting Posts
warning: stream_socket_client (): невозможно установить файл закрытого ключа Как сделать ссылку, отправленную почтой и сделанную случайными токенами, доступ к их собственным данным на странице PHP Санитарная обработка данных в PHP Показать все ошибки проверки модели в верхней части страницы в cakePHP внезапно запускается $ _SERVER 10.10.10.10 php php mysql Group Для получения последней записи, а не первой записи Живой чат с PHP и jQuery. Где хранить информацию? Mysql или файл? Неустранимая ошибка: класс «XSLTProcessor» не найден можете ли вы рассказать мне, что не так с этой функцией вызова API Google Drive в PHP? преобразовать в трехзначный шестнадцатеричный код цвета Преобразование специальных символов (другого языка) на английский в PHP mysqli_query () ожидает как минимум 2 параметра & mysqli_query (): пустые сообщения об ошибках запроса Почему Apache 2.1.7 в WAMP не регистрирует ошибки PHP в журнале ошибок PHP? В чем разница между ++ $ i и $ i ++ в PHP? Как связать параметры массива в структуре YII?

Обратный отсчет PHP до даты

Как установить дату и получить обратный отсчет в PHP? Например, если я установил дату как 3 декабря 2PM, она сообщит мне, сколько осталось дней и часов.

Нет необходимости в пользовательских вводах для даты, поскольку она будет жестко закодирована.

Благодарю.

Solutions Collecting From Web of "Обратный отсчет PHP до даты"

Вы можете использовать функцию strtotime, чтобы получить время указанной даты, а затем использовать время, чтобы получить разницу.

$date = strtotime("December 3, 2009 2:00 PM"); $remaining = $date - time(); 

Осталось бы количество оставшихся секунд. Затем вы можете разделить это число, чтобы получить количество дней, часов, минут и т. Д.

 $days_remaining = floor($remaining / 86400); $hours_remaining = floor(($remaining % 86400) / 3600); echo "There are $days_remaining days and $hours_remaining hours left"; 

Позвольте мне поиграть так:

 $rem = strtotime('2012-08-01 14:00:00') - time(); $day = floor($rem / 86400); $hr = floor(($rem % 86400) / 3600); $min = floor(($rem % 3600) / 60); $sec = ($rem % 60); if($day) echo "$day Days "; if($hr) echo "$hr Hours "; if($min) echo "$min Minutes "; if($sec) echo "$sec Seconds "; echo "Remaining..."; 

Попробуйте это на досуге … 🙂

ПРИМЕЧАНИЕ. Нет теста if() для echo "Remaining..." , просто потому, что вы не будете обрабатывать это, если $rem <= 0 . Не так ли?

PHP 5.3 позволяет:

 $dt_end = new DateTime('December 3, 2009 2:00 PM'); $remain = $dt_end->diff(new DateTime()); echo $remain->d . ' days and ' . $remain->h . ' hours'; 

Это не так тривиально, как вычитание результатов strtotime (), поскольку есть летнее время, и время будет математически правильным, но не физически. Во всяком случае, для этих целей вы должны использовать функцию gmdate (), которая не имеет дневного сбережения:

 $date = gmdate('U', strtotime('2009-12-03 14:00')); // Get difference between both dates without DST $diff = $date - gmdate('U'); // Days (in last day it will be zero) $diff_days = floor($remaining / (24 * 60 * 60)); // Hours (in the last hour will be zero) $diff_hours = floor($remaining % (24 * 60 * 60) / 3600); 

Был ли этот отсчет до конца семестра:

  $endOfSemester = mktime(15,30,0,5,21,2015); $now = time(); $secondsRemaining = $endOfSemester - $now; define('SECONDS_PER_MINUTE', 60); define('SECONDS_PER_HOUR', 3600); define('SECONDS_PER_DAY', 86400); $daysRemaining = floor($secondsRemaining / SECONDS_PER_DAY); //days until end $secondsRemaining -= ($daysRemaining * SECONDS_PER_DAY); //update variable $hoursRemaining = floor($secondsRemaining / SECONDS_PER_HOUR); //hours until end $secondsRemaining -= ($hoursRemaining * SECONDS_PER_HOUR); //update variable $minutesRemaining = floor($secondsRemaining / SECONDS_PER_MINUTE); //minutes until end $secondsRemaining -= ($minutesRemaining * SECONDS_PER_MINUTE); //update variable echo("<h3>There are $daysRemaining days, $hoursRemaining hours, $minutesRemaining minutes, $secondsRemaining seconds until the end of the semester</h3>"); //print message 

Используя решение @Izhar Aazmi, вы можете легко настроить его для отображения:

  public function countdown($time, $h = true, $m = true, $s = true) { $rem = $time - time(); $day = floor($rem / 86400); $hr = floor(($rem % 86400) / 3600); $min = floor(($rem % 3600) / 60); $sec = ($rem % 60); if ( $day && !$h ) { if ( $hr > 12 ) $day++; // round up if not displaying hours } $ret = Array(); if ( $day && $h ) $ret[] = ($day ? $day ." day".($day==1?"":"s") : ""); if ( $day && !$h ) $ret[] = ($day ? $day . " day" . ($day == 1 ? "" : "s") : ""); if ( $hr && $h ) $ret[] = ($hr ? $hr ." hour" . ($hr==1?"":"s") : ""); if ( $min && $m && $h ) $ret[] = ($min ? $min ." minute". ($min==1?"":"s") : ""); if ( $sec && $s && $m && $h ) $ret[] = ($sec ? $sec ." second".($sec==1?"":"s") : ""); $last = end($ret); array_pop($ret); $string = join(", ", $ret)." and {$last}"; return $string; } 

Надеюсь, это поможет! Это хороший чистый способ или отображение обратного отсчета.

Для тех, кто ищет функцию, способную обрабатывать больший и меньший промежуток времени (php> 5.3):

 /** * Return a textual representation of the time left until specified date */ function timeleft(DateTime $date){ $now = new DateTime(); if($now > $date){ return '0 second'; } $interval = $date->diff($now); if($interval->y){ return $interval->format("%y year").($interval->y > 1 ? 's':''); } else if($interval->m){ return $interval->format("%m month").($interval->m > 1 ? 's':''); } else if($interval->d){ return $interval->format("%d day").($interval->d > 1 ? 's':''); } else if($interval->h){ return $interval->format("%h hour").($interval->h > 1 ? 's':''); } else if($interval->i){ return $interval->format("%i minute").($interval->i > 1 ? 's':''); } else if($interval->s) { return $interval->format("%s second").($interval->s > 1 ? 's':''); } else { return 'milliseconds'; } }