Раница в "месяцах" между двумя датами в php??
Код:
<?
$result=mysql_query("SELECT users.uid, users.user, users.fio, users.address, (Sum(actions.in_bytes)/1048576)/".$months." AS out_mb,
(Sum(actions.out_bytes)/1048576)/".$months." AS in_mb, (Sum(actions.in_bytes)/1048576+Sum(actions.out_bytes)/1048576)/".$months." AS sum_mb
FROM actions INNER JOIN users ON actions.user = users.user
WHERE (((actions.start_time) Between '".$t_start_time."' And '".$t_stop_time."') AND
((actions.stop_time) Between '".$t_start_time."' And '".$t_stop_time."'))
GROUP BY users.uid, users.user, users.fio, users.address
HAVING ((((Sum(actions.in_bytes)/1048576+Sum(actions.out_bytes)/1048576)/".$months.")Between ".$mb_min." And ".$mb_max."))",$LINK);
....
?>
$result=mysql_query("SELECT users.uid, users.user, users.fio, users.address, (Sum(actions.in_bytes)/1048576)/".$months." AS out_mb,
(Sum(actions.out_bytes)/1048576)/".$months." AS in_mb, (Sum(actions.in_bytes)/1048576+Sum(actions.out_bytes)/1048576)/".$months." AS sum_mb
FROM actions INNER JOIN users ON actions.user = users.user
WHERE (((actions.start_time) Between '".$t_start_time."' And '".$t_stop_time."') AND
((actions.stop_time) Between '".$t_start_time."' And '".$t_stop_time."'))
GROUP BY users.uid, users.user, users.fio, users.address
HAVING ((((Sum(actions.in_bytes)/1048576+Sum(actions.out_bytes)/1048576)/".$months.")Between ".$mb_min." And ".$mb_max."))",$LINK);
....
?>
Может все можно сделать непосредственно в запросе функциями MySQL?
Цитата: AlKov
Может все можно сделать непосредственно в запросе функциями MySQL?
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_period-diff
Кстати. Крайне рекомендую купить вот эту книгу:
Цитата: alekciy
Благодарю! Самое онО. Для решения конкретной задачи подходит на все 100%.
А вот если вдруг потребуется просто вычислить в php разницу в месяцах между датами, находящимися в двух переменных, то тут как можно поступить?
P.S. В ненавистном многим из присутствующих здесь VB есть "чудесная" функция DateDiff, которая с этой задачей справляется на раз-два. Что-нибудь подобное можно наваять в php? Готового вроде как вообще не существует?
Нативно на уровне языка я такой функции не знаю. Но по мне написать таковую будет не так уж и сложно...
Код:
/**
* Метод сравнивает 2 даты и возвращает разницу в месяцах
*
* Формат даты дд.мм.гггг
*
* @author shaelf
* @param string $dateFirst
* @param string $dateSecond
* @return int
*/
function diffDate($dateFirst, $dateSecond)
{
list(,$mouthFirst, $yearFirst) = explode($dateFirst);
list(,$mouthSecond, $yearSecond) = explode($dateSecond);
$countMouthFirst = $yearFirst * 12 + $mouthFirst;
$countMouthSecond = $yearSecond * 12 + $mouthSecond;
if($countMouthSecond > $countMouthFirst) {
$rv = $countMouthSecond - $countMouthFirst;
} else {
$rv = $countMouthFirst - $countMouthSecond;
}
return $rv;
}
* Метод сравнивает 2 даты и возвращает разницу в месяцах
*
* Формат даты дд.мм.гггг
*
* @author shaelf
* @param string $dateFirst
* @param string $dateSecond
* @return int
*/
function diffDate($dateFirst, $dateSecond)
{
list(,$mouthFirst, $yearFirst) = explode($dateFirst);
list(,$mouthSecond, $yearSecond) = explode($dateSecond);
$countMouthFirst = $yearFirst * 12 + $mouthFirst;
$countMouthSecond = $yearSecond * 12 + $mouthSecond;
if($countMouthSecond > $countMouthFirst) {
$rv = $countMouthSecond - $countMouthFirst;
} else {
$rv = $countMouthFirst - $countMouthSecond;
}
return $rv;
}
Писал в форуме сонный, на ошибки не проверял
Гы... вот добавить еще принятие даты в любом формате и вообще хорошо будет :D
не проще ли использовать функцию strtotime?
Кому как удобней)))) (Особенно сонному)