2012-06-09 5 views
0

У меня есть эти 2 даты хранятся в MySQL:разница между двумя датами в PHP

2012-10-05 
2012-10-10 

Я получил даты вернулся с использованием PHP/MySQL теперь мне нужно, чтобы узнать, сколько дней отделяют их. в этом примере это будет 5дней. любое предложение о том, что было бы лучшим способом сделать это?

+1

['strtotime()'] (http://php.net/manual/en/function.strtotime.php) принимает строку и возвращает временную метку unix. Если вы выполнили 'strtotime()' для каждого и вычитали, у вас была бы разница между двумя датами в секундах. Разделите соответствующим образом, и вы в пути. – jedwards

ответ

1
SELECT DATEDIFF(date1, date2) 
FROM yourtable 

в соответствии с Документами MySQL: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff

DateDiff() возвращает разницу date1 - date2 в днях.

+0

спасибо за этот подход, я не знал, что вы могли бы это сделать через sql, знали только о php. – cppit

+2

Лучше сделать это в базе данных, вместо того чтобы заставить mysql преобразовать свой внутренний формат даты в строку, а затем заставить php преобразовать эту строку обратно в временную метку php. следует избегать бесцельного кругового отключения. –

+0

true. могу ли я выбрать больше, чем эти поля? например, SELECT DATEDIFF (date1, date2), users.email, users.id FROM mytable. Я буду рассылать по электронной почте те, где date1-date2 больше, чем 5days – cppit

1
$date1 = strtotime("2012-10-05"); 
$date2 = strtotime("2012-10-10"); 



$days = floor(abs($date2 - $date1)/ (60*60*24)); 

printf("%d days",$days); 
1
$date1 = new DateTime('2012-10-05'); 
$date2 = new Datetime('2012-10-10'); 
$interval = $date1->diff($date2); 
echo $interval->format('%R%d days'); // +5 days 
1

Попробуйте что-то вроде этого:

$ date1 = "2007-03-24"; $ date2 = "2009-06-26";

$ diff = abs (strtotime ($ date2) - strtotime ($ date1));

$ years = floor ($ diff/(365 * 60 * 60 * 24)); $ months = floor (($ diff - $ years * 365 * 60 * 60 * 24)/(30 * 60 * 60 * 24)); $ days = floor (($ diff - $ years * 365 * 60 * 60 * 24 - $ months * 30 * 60 * 60 * 24)/(60 * 60 * 24));

printf ("% d years,% d months,% d days \ n", $ years, $ months, $ days);

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