Есть две переменые $Data_start $Data_end в них записана дата и время такого формата date('Y-m-d H:i:s') как вычислить продолжительность пробовал вычитать $m=$Data_end-$Date_start; но значение $m всегда получаеться раво нулю нужно чтобы писалось в итоге к примеру 1 day 20 hours 54 minuts 22 seconds если скажем год и месяц совпадают то они бы вообще не печатались как это можо сделать ?
sound Пишем форум? Переводи обе даты в формат Unix-Timestamp (целое число), вычитай первое из второго, результат переводи в нужный тебе формат.
Dagdamor нет не форум бесплатных движков форумов и так полно везде а чем перевести дату в формат Unix-Timestamp какой фукцией ?? что то я найти не могу и какой функцией потом форматировать ???
$m = strtotime($row->Date); $k = date('Y-m-d H:i:s'); $f = strtotime($k); $s =$f-$m; echo date("Y-m-d H:i:s", $s); ну вот в Unix-Timestamp я преобразовал вычел одно время из другого а потом когда я обратно преобразовываю мне пишет к примеру 1970-01-04 03:28:17 а это бред то есть я получил переменную $s в Unix-Timestamp формате которая показывает продолжительность то что мне нужна а как теперь преобразовать в нормальый вид немогу понять
Ага только вот скрипт с ошибкой при любых значениях $ts1 и $ts2 выводит Notice: Undefined variable: days in C:\php20.tmp on line 19 days 1 minute y 1 second PHP: function date_diff_as_text($ts1, $ts2) { $ts1 = strtotime($ts1); $ts2 = strtotime($ts2); $diff = abs($ts1-$ts2); $sec_min = 60; $sec_hour = $sec_min*60; $sec_dias = $sec_hour*24; $dias = intval($diff/$sec_dias); $hours = intval($diff/$sec_hour)%24; $minutes = intval($diff/$sec_min)%60; $seconds = $diff%60; if ($dias > 0) { $result = "$days day"; if ($dias > 1) { $result .= "s"; } } if ($hours > 0) { $result .= " $hours hour"; if ($hours > 1) { $result .= "s"; } } if ($minutes > 0) { $result .= " $minutes minute"; if ($minutes > 1) { $result .= "s"; } } if ($seconds > 0) { $result .= " $seconds second"; if ($seconds > 1) { $result .= "s"; } } $result = explode(" ", $result); if (count($result)>2) { end($result); $key1 = key($result); prev($result); $key2 = key($result); $aux = $result[$key2]; $aux .= " ".$result[$key1]; unset($result[$key1]); unset($result[$key2]); $result = implode(" ", $result); $result .= " y $aux"; } else { $result = implode(" ", $result); } return $result; } $ts1 = "2006-01-05 10:30:45"; $ts2 = "2007-01-06 10:31:46"; echo date_diff_as_text($ts1, $ts2);
А ошибка из-за того что слишком длинный... Код (Text): function date_diff_as_text($ts1, $ts2) { return date('Y-m-d H:i:s', abs(strtotime($ts1)-strtotime($ts2))); }
S.t.A.M. ну да теперь выдает результат 1970-11-07 03:01:01 опять вернулся с чего начинал неужели это так сложно ?? зачем поместили тему в раздел для блондинок
PHP: <?php function date_diff_as_text($ts1, $ts2) { $diff = abs(strtotime($ts1)-strtotime($ts2)); // Получаем разницу в секундах // Дальше, зная сколько секунд в минуте, минут в часе, часов в сутках, и т.д. делим, выводим $days = floor($diff/(60*60*24)); $diff = $diff%(60*60*24); $hours = floor($diff/3600); $diff = $diff%3600; // ну и так далее }
AlexGousev ну а что далее то ? вставляю этот код в скрипт который я здесь написал работает все так же с ошибкой принцип то один считается сколько секунд в сутках месяце и так далее но ничего в итоге не работает
AlexGousev, не не совсем так... логику понял, если никто не поможет - завтра напишу - сейчас должен бежать...
AlexGousev а мне не нужно ничего писать я уже написал все смотри выше а вы просто повторили то же самое чуть в другой форме S.t.A.M. Эх буду ждать ошибку понять немогу
PHP: <?php $ts1 = strtotime("2006-10-12 12:10:00"); $ts2 = time(); $diff = abs($ts2 - $ts1); $y = floor($diff / (60 * 60 * 24 * 365)); $diff -= $y * 60 * 60 * 24 * 365; $m = floor($diff / (60 * 60 * 24 * 30)); $diff -= $m * 60 * 60 * 24 * 30; $d = floor($diff / (60 * 60 * 24)); $diff -= $d * 60 * 60 * 24; $h = floor($diff / (60 * 60)); $diff -= $h * 60 * 60; $i = floor($diff / 60); $diff -= $i * 60; $s = floor($diff); print $y . " years " . $m . " month " . $d . " days " . $h . " hours " . $i . " minutes " . $s . " seconds ";
Sergey89 спасибо а я окончательно привел это к нормальному виду PHP: <?php function date_diff_as_text($ts1, $ts2) { $diff = abs($ts2 - $ts1); $y = floor($diff / (60 * 60 * 24 * 365)); $diff -= $y * 60 * 60 * 24 * 365; $m = floor($diff / (60 * 60 * 24 * 30)); $diff -= $m * 60 * 60 * 24 * 30; $d = floor($diff / (60 * 60 * 24)); $diff -= $d * 60 * 60 * 24; $h = floor($diff / (60 * 60)); $diff -= $h * 60 * 60; $i = floor($diff / 60); $diff -= $i * 60; $s = floor($diff); if ($y > 0){ $result = $y . " years " . $m . " month " . $d . " days " . $h . " h " . $i . " min " . $s . " sec "; } else { if ($m > 0){ $result = $m . " month " . $d . " days " . $h . " h " . $i . " min " . $s . " sec "; } else { if ($d > 0){ $result = $d . " d " . $h . " h " . $i . " min " . $s . " sec "; } else { if ($h > 0){ $result = $h . " h " . $i . " min " . $s . " sec "; } else { if ($i > 0){ $result = $i . " min " . $s . " sec "; } } } } } return $result;} $ts1 = strtotime("2007-10-12 07:59:55"); $ts2 = strtotime("2007-10-12 08:04:45"); echo date_diff_as_text($ts1, $ts2);
S.t.A.M. ну мне это не важно продолжительность врятли будет больше нескольких часов эта функция должна быть стандартной в пхп какойто юникс формат надо делать бред надо просто вычитать одно из другого и ни о чем не думать
Гы... Придумал еще один вариант функции: Код (Text): function date_diff_as_text($ts1, $ts2) { //1970-01-01 03:00:00 - абсолютный ноль по линуксу $diff = abs(strtotime($ts1)-strtotime($ts2)); $res = (date('Y',$diff)-1970)." years ". (date('m',$diff)-1) ." month ". (date('d',$diff)-1) ." day ". (date('H',$diff)-3) ." hours ". date('i',$diff) ." minuts ". date('s',$diff) ." seconds"; return $res; } Ну и кто захочет потестить код ее вызывающий: Код (Text): $ts2 = "2007-10-12 07:59:55"; $ts1 = "2007-10-12 08:04:45"; echo date_diff_as_text($ts1, $ts2);