Подтвердить что ты не робот

Сколько дней до даты X-Y-Z?

Я пытаюсь создать виджет обратного отсчета.

При определенной дате, какой самый простой способ в PHP определить, сколько дней до этой даты?

4b9b3361

Ответ 1

<?php 
$cdate = mktime(0, 0, 0, 12, 31, 2009, 0);
$today = time();
$difference = $cdate - $today;
if ($difference < 0) { $difference = 0; }
echo "There are ". floor($difference/60/60/24)." days remaining";
?>

Ответ 2

Развернувшись на ответ schnaader, вот однострочная функция, которая берет строку даты как параметр, но возвращает только число дней:

<?php
function days_until($date){
    return (isset($date)) ? floor((strtotime($date) - time())/60/60/24) : FALSE;
}
?>

Ответ 3

Формат дней в минутах и ​​секундах:

// current time
$today = new DateTime(format_date(time(), 'custom', 'd M Y H:i:s'));
// date to which we want to compare (A Drupal field in my case).
$appt  = new DateTime(format_date($yourdate_is_timestamp, 'custom', 'd M Y H:i:s' ));

// Months
$months_until_appt = $appt->diff($today)-> m;
// days
$days_until_appt = $appt->diff($today)-> days;
// hours
$hours_until_appt = $appt->diff($today)-> h;
// minutes
$minutes_until_appt = $appt->diff($today)-> i;
// seconds
$seconds_until_appt = $appt->diff($today)-> s;

echo 'days until: ' . $days_until_appt;
echo 'hours until: ' . $hours_until_appt;
echo 'minutes until: ' . $minutes_until_appt;
echo 'seconds until: ' . $seconds_until_appt;

Ответ 4

Не считайте даты целыми числами. Используйте свою базу данных, которая имеет хорошую поддержку для работы с календарем/временем.

select datediff("2009-11-12", now())

Ответ 6

Я только что встретил это в своем коде для живого приложения, где система неправильно расценивает сегодня и завтра как сегодня. Мы только что вошли в британское летнее время, и это вызвало проблему с нашим приложением.

Теперь я использую следующее, которое дает мне правильный результат:

function days_away_to($dt) {
    $mkt_diff   = strtotime($dt) - time();
    return floor( $mkt_diff/60/60/24 ) + 1; # 0 = today, -1 = yesterday, 1 = tomorrow
}

Конечно, использование класса DateTime - лучшее решение в будущем...