[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: разница дат
olgatcpip
Здравствуйте

уже была эта тема, не могу найти как 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
круто, но что-то не работает sad.gif
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.2.6
вот мой пых

Спустя 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
    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.

Спустя 3 минуты, 23 секунды (15.08.2011 - 10:50) Invis1ble написал(а):
olgatcpip
щас перекурю и покажу как обойтись без DateTime smile.gif

Спустя 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

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.