Сколько дней до даты XYZ?

Учитывая определенную дату, самый простой способ определить, сколько дней до этой даты (в PHP)? Я пытаюсь создать обратный виджет, спасибо!

<?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"; ?> 

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

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

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

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

В PHP 5.3 введен класс DateTime, который реализует функцию «diff». См. http://www.php.net/manual/en/datetime.diff.php

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

 // current time $today = new DateTime(format_date(time(), 'custom', 'd MYH: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 MYH: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; 

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

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

 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 – лучшее решение в будущем …