уже была эта тема, не могу найти как 3 часа, хотя я на нее подписана была... и даже вариант написала
Суть такая мне нужно вычислить разницу между датами, прям как у нас на формуме
"На форму 1 год, 2 месяца, 3 дня", только ещё часы, минут и секунды добавить. Дорогие хозяева форма, дайте пожалуйста эту функцию.
А также если кто-то наткнется на ту тему, аналогичную, прошу показать.
Спустя 22 минуты, 2 секунды (15.08.2011 - 08:39) Invis1ble написал(а):
olgatcpip
Вот пример, я недавно писал
Вот пример, я недавно писал
$datetime1 = new DateTime(date('d.m.Y H:i'));
$datetime2 = new DateTime(date('13.09.2012 01:00'));
$interval = $datetime1->diff($datetime2);
echo $interval->format('%y year(s) %m month(s) %d day(s), %H hour(s) %i minute(s) %s second(s)');
Спустя 6 минут, 35 секунд (15.08.2011 - 08:45) olgatcpip написал(а):
Invis1ble
круто, но что-то не работает
Fatal error: Call to undefined method DateTime::diff()
круто, но что-то не работает
Fatal error: Call to undefined method DateTime::diff()
Спустя 16 минут (15.08.2011 - 09:01) Invis1ble написал(а):
Странно... Это по идее говорит о том, что не установлен модуль. Однако, он и не должен устанавливаться, т.к. эти функции входят в ядро php начиная с версии 5.2.0 (я на всякий случай перерыл конфиги, и ничего связанного с подключением подобной либы не нашел, у меня 5.3.1)
Вот что мануал говорит по этому поводу. У тебя наверное старый пых...
Вот что мануал говорит по этому поводу. У тебя наверное старый пых...
Спустя 1 минута, 11 секунд (15.08.2011 - 09:02) olgatcpip написал(а):
Спустя 5 минут, 31 секунда (15.08.2011 - 09:08) Invis1ble написал(а):
А, ну вот из мануала:
Цитата |
DateTime::diff date_diff (PHP 5 >= 5.3.0) |
т.е. сама функция diff появилась с версии 5.3.0
Спустя 6 минут, 32 секунды (15.08.2011 - 09:14) olgatcpip написал(а):
да, я тоже на это смотрю...
попробую воспользоваться функциями здешними
попробую воспользоваться функциями здешними
Спустя 1 час, 17 минут, 2 секунды (15.08.2011 - 10:31) Invis1ble написал(а):
olgatcpip
если небольшая погрешность не критична, то вот написал велосипед. Актуален для 5.2.0 <= PHP < 5.3.0
если небольшая погрешность не критична, то вот написал велосипед. Актуален для 5.2.0 <= PHP < 5.3.0
function dateDiff($date1, $date2)
{
$d1 = new DateTime($date1);
$d2 = new DateTime($date2);
$td = $d1->format('U') - $d2->format('U');
$y = floor($td / 31557600);
$m = floor(($td - $y * 31557600) / 2629800);
$d = floor(($td - $y * 31557600 - $m * 2629800) / 86400);
$h = floor(($td - $y * 31557600 - $m * 2629800 - $d * 86400) / 3600);
$min = floor(($td - $y * 31557600 - $m * 2629800 - $d * 86400 - $h * 3600) / 60);
return array(
'years' => $y,
'months' => $m,
'days' => $d,
'hours' => $h,
'minutes' => $min,
'seconds' => $td - $y * 31557600 - $m * 2629800 - $d * 86400 - $h * 3600 - $min * 60
);
}
$date1 = '10.07.2010 08:20:05';
$date2 = date('d.m.Y H:i:s');
echo $date1 . '<br />' . $date2 . '<br />';
echo '<pre>'; print_r(dateDiff($date2, $date1)); echo '</pre>';
Спустя 15 минут, 16 секунд (15.08.2011 - 10:47) olgatcpip написал(а):
Invis1ble
Спасибо, но у меня DateTime не работает. хнык.
а вообще мозг взывает задачка, если не не пользоваться DateTime.
Спасибо, но у меня DateTime не работает. хнык.
а вообще мозг взывает задачка, если не не пользоваться DateTime.
Спустя 3 минуты, 23 секунды (15.08.2011 - 10:50) Invis1ble написал(а):
olgatcpip
щас перекурю и покажу как обойтись без DateTime
щас перекурю и покажу как обойтись без DateTime
Спустя 8 минут, 5 секунд (15.08.2011 - 10:58) Invis1ble написал(а):
Даешь костылей хороших и много :D
function dateDiff($date1, $date2)
{
$td = strtotime(str_replace('/', '.', $date1)) - strtotime(str_replace('/', '.', $date2));
$y = floor($td / 31557600);
$m = floor(($td - $y * 31557600) / 2629800);
$d = floor(($td - $y * 31557600 - $m * 2629800) / 86400);
$h = floor(($td - $y * 31557600 - $m * 2629800 - $d * 86400) / 3600);
$min = floor(($td - $y * 31557600 - $m * 2629800 - $d * 86400 - $h * 3600) / 60);
return array(
'years' => $y,
'months' => $m,
'days' => $d,
'hours' => $h,
'minutes' => $min,
'seconds' => $td - $y * 31557600 - $m * 2629800 - $d * 86400 - $h * 3600 - $min * 60
);
}
$date1 = '10.07.2010 08:20:05';
$date2 = date('d.m.Y H:i:s');
echo $date1 . '<br />' . $date2 . '<br />';
echo '<pre>'; print_r(dateDiff($date2, $date1)); echo '</pre>';
Спустя 35 минут, 9 секунд (15.08.2011 - 11:33) olgatcpip написал(а):
Invis1ble
у тебя так красиво написано...
но у меня не сходилось в высокосном году
у тебя так красиво написано...
но у меня не сходилось в высокосном году
Цитата |
31.12.2011 08:20:05 01.03.2012 08:20:05 Array ( [years] => 0 [months] => 2 [days] => 0 [hours] => 3 [minutes] => 0 [seconds] => 0 ) |
и 3 часа, ты про эту погрешность говорил?
Спустя 4 минуты, 51 секунда (15.08.2011 - 11:38) Invis1ble написал(а):
Да, и про эту погрешность тоже. С високосными годами там действительно проблема.
Пока что добавил ф-цию сюда, сейчас подумаю, как ее улучшить.
Пока что добавил ф-цию сюда, сейчас подумаю, как ее улучшить.
_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький блог
в этом блоге публикую новые работы
WMR217126627282 wink.gif