Странные результаты со временем

$skip

Guest
Странные результаты со временем

Я забираю из БД метки времени в обычном формате по парно, т.е начало и конец, чтобы вычислить продолжительность я преобразую время конца и начала с помощью strtotime, после всех операция преобразую обратно чтобы посмотреть в нормальном виде с помощью date(); у меня получается огромное количество часов, хотя при подсчете вручную меньше половины часа? Почему так?
 

IL78

Guest
а что мешает вычислять продолжительность средствами базы?
 

$skip

Guest
Вот такой у меня код преобразования строки в метку : $sum = strtotime($max_t) - strtotime($min_t); После делаю обратное :
date("H:i:s",$sum)
 

IL78

Guest
strtotime пытается интерпретировать последовательности чисел с разделителями как американский формат даты "год, месяц, число, час, мин, сек". Если твой "обычный формат" даты не такой, лучше не полагаться на strtitime, а разбирать дату самому с помощью explode().
 

TuBu

Guest
$skip :)

Советую почитать про второй параметр к функции date.

И про Unix Timestamp где-нибудь заодно.
 

$skip

Guest
до чего люди пошли... хорошо вместо ":" можно поставить "-" сделав ereg_replace(":","-",$); как обратно его вывести в нормальную дату, если не через date?
 

TuBu

Guest
$skip
$sum - это не timestamp
это разница timestamp'ов

улавливаешь?

в чем у тебя проблема?

вычислить, скольким часам равно 1789 секунд?

или в чем?
 

alpine

Новичок
IL78
Похоже нужно написать
PHP:
$timestamp1 = time();
// Вывод 1093291675
sleep(3);
$timestamp2 = time();
// Вывод 1093291678
$diff = $timestamp2 - $timestamp2;
// Вывод 3
Теперь вопрос: чем отличается $timestampX от $diff ?
 

IL78

Guest
alpine, ну и чем? Все три значения - целые положительные числа...

[для истории: в том посте, который я удалил, именно чтобы избежать подобных разночтений, я пытался выступить в защиту использования date()-подобных ф-ций для форматирования интервалов времени, заведомо меньших, чем сутки]

$skip, в своем прошлом посте я указывал на последовательность значений, а не символ разделителя - он там ни при чем. Извиняюсь, если невольно сбил с толку.
 

alpine

Новичок
>> использования date() для форматирования интервалов времени, заведомо меньших суток

Здесь ты не мог бы попобробней рассказать как это ты делаешь?
 

alpine

Новичок
IL78
Тоесть, если у меня например разница timestamp-ов 60 секунд, то что мне должна вывести конструкция date("H:i:s", 60)
?
 

IL78

Guest
alpine, признаю свою грубейшую ошибку

gmdate и далее по тексту... вот что значит постоянно спать менее 3-х часов в сутки... хотя все равно стыдно - такие грабли, и забыть!
 

$skip

Guest
честно говоря так нихрена и не понял, все грамотные а простой скрипт как сделать правильно отписать не смогли. Я писал что мой скрипт выдает мне немеренные значения, т.е работает где то не правильно. У меня есть две отметки времени 00:00:00 и 00:00:10. Так вот мне нужно из второго вычесть первое а потом вывестив нормальный вид, т.е ответ должен получиться 10сек. Я редко сталкивался с датами потому и задою вопрос, похоже все отвечают чтобы кол-во постов себе наколотить, красивых ответов всего видел несколько на вопрос. Никому не в обиду сказано.....
 

TuBu

Guest
Код:
    $hours = floor($sum / 3600);
    $sum %= 3600;
    $minutes = floor($sum / 60);
    $sum %= 60;
    $seconds = $sum;
    echo "$hours:$minutes:$seconds";
 

$skip

Guest
2 TuBu
Это как я понял вывод времни. Преобразовывать для начала из 00:00:10 в секунды с помошью strtotime(); ? Я проверял только преобразовывать вроде точные ответы даже при таком разделителе ":".
 

TuBu

Guest
$skip
А у тебя что, метки времени в формате H:i:s хранится?
А ты не хотел бы использовать полный формат времени для своих меток?

Типа
2004-08-24 12:11:11
 

$skip

Guest
Полный формат я думаю вряд ли получится т.к года не хватает, а добавлять нет смысла. Метки у меня хронятся в таком виде 00:00:00. "H:i:s" точно
 

Boratustra

Новичок
Originally posted by $skip
Метки у меня хронятся в таком виде 00:00:00. "H:i:s" точно
Хм, то есть у тебя возможна ситуация, когда
начало = 23:59:02, а
конец = 00:01:05, так что ли?
И как ты собираешься вычислять промежуток?
Имхо тебя избавит от всех этих проблем unix_timestamp в базе...
 

TuBu

Guest
Вообщем как вариант (корявенький): дописывай к своим меткам строку, чтоб их можно было бы strtotime использовать.

Код:
    $date1 = "00:01:01";
    $date2 = "00:01:34";
    $prefix = "2004-01-01 ";
    $sum = strtotime($prefix.$date2) - strtotime($prefix.$date1);
    $hours = floor($sum / 3600);
    $sum %= 3600;
    $minutes = floor($sum / 60);
    $sum %= 60;
    $seconds = $sum;
    echo "Interval = $hours:$minutes:$seconds";
-~{}~ 24.08.04 13:42:

Boratustra, уже говорили ему это.

Не хочет он знатся с timestamp
 
Сверху