2013-07-16 3 views
-6

Что является лучшим способом для вычитания дат, чтобы узнать, какое время осталось для определенного события с фиксированной датой? Например, я хочу показать, сколько дней осталось для какого-то отдаленного будущего события в 2013-10-14 годах.Как подобрать даты, чтобы узнать, сколько времени осталось в php?

Ok

$now=strtotime(date("Y-m-d")); 
$fix=strtotime(date("2013-10-14")); 
$left=$fix-$now; 
$left=date('d', $left); 
echo "There are ".$left." days left"; 

Проблема заключается в том: она показывает, что 01 день осталось. Я думаю, что я не сформировал временную метку в формате данных. Я прав?

+0

Исправьте свой первый вопрос, не создавайте новый с тем же контентом. –

+0

Я получаю «Осталось 31 дней». –

+0

Возможный дубликат [Что является лучшим способом для вычитания дат, чтобы узнать, какое время осталось в php?] (Http://stackoverflow.com/questions/17687461/what-is-the-best-way-for-subtracting- date-to-see-what-time-is-left-in-php) – AD7six

ответ

3

Вы ищете date_diff.

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%R%a days'); 
0

Вы рассматриваете разницу как абсолютное время; если вы включили год в вашей date() функции было бы, вероятно, показать 1970.

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

$now = time(); 
$then = strtotime('2013-10-14'); 
$seconds_left = $then-$now; 
$days_left = $seconds_left/60*60*24; 

и округление или усечение, чтобы соответствовать вашим потребностям. Для более сложных манипуляций ознакомьтесь с DateInterval.

Отредактировано, чтобы показать, что получение текущего времени проще, чем то, что вы делаете.

+1

Не доверяйте секундам для математики, особенно если вы кодируете что-то, что зависит от секунд. Он не учитывает летнее время или секунды прыжка! – BLaZuRE

+0

Хорошая точка, хотя увеличение накладных расходов может не стоить того, если время от времени бывает проблемой. Если это проблема, однако, это не лучший подход. – Jerry

0

StrToTime дает вам метку времени Unix, который измеряется в секундах. Поскольку дата принимает временную метку unix, вы видите дату, связанную с разницей в секундах от эпохи. Так что ваш код должен быть:

$now=strtotime(date("Y-m-d")); 
$fix=strtotime(date("2013-10-14")); 
$left=$fix-$now; 
$left = round($left/(3600*24)); 

echo "There are ".$left." days left"; 
+0

Это дает '89', когда должно быть' 88'. –

+0

@amalmurali Какое ваше местное время ...вы уверены, что это не вчера :). Это работает для меня. – Orangepill

Смежные вопросы