2014-01-29 2 views
0

Я собираю время так.Преобразование общего времени в секундах

$totalTimeDiff = new DateTime("@0"); 
foreach($dbrecords as $row) 
{ 
    $timeDiff = date_diff(... two datetimes from my database ...) 
    $totalTimeDiff->add($timeDiff); 
} 

Так $totalTimeDiff является объектом DateTime, с суммой всех временных разниц суммируются (поэтому сумма всех длительностей). Как я могу получить общее время в секундах?

+0

1. используйте 'DateInterval', поскольку вы рассчитываете правильный интервал и не храните дату; 2. прочитайте его документацию, чтобы получить интервал в секундах. – moonwave99

+0

Если я использую date_diff, чтобы получить значение, как я могу преобразовать это в секунды? Я не видел этого в документации. Я просто вижу, как отбирать секунды. – muttley91

+0

[Просто вычислите разницу с _now_] (http://stackoverflow.com/questions/3176609/calculate-total-seconds-in-php-dateinterval). – moonwave99

ответ

0

Почему бы не сохранить его простым?

$totalseconds=0; 
foreach($dbrecords as $row) 
    $totalseconds+=(UNIX_TIMESTAMP(second_datetime)-UNIX_TIMESTAMP(first_datetime)); 
+0

Это будет работать до тех пор, пока значения в базе данных будут сохранены в отношении UTC. Если вы храните локальные значения (надеюсь, что нет), тогда вам нужно учитывать временные зоны и DST, что намного сложнее. –

+0

Поскольку мы вычисляем разницу, смещение времени будет дельта, если оба имеют одинаковые значения. –

+0

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

0

функция использование StrToTime

эхо StrToTime ('01: 00: 00 ') - StrToTime (' СЕГОДНЯ ");

0

Принимая советы moonwave99, я использовал DateInterval (не помню, почему я пошел с DateTime для этого, в первую очередь, возможно, обходного пути для чего-то на другом этапе проекта) и вычислил секунды, добавляя каждый значение к итогу после преобразования его в секунды (конвертирование часов и минут в секунды и их суммирование). Я сделал это, используя свойство DateInterval class's seconds, а также следующую функцию для преобразования DateInterval в секундах (Примечание: только для моего конкретного случая учитываются дни, часы, минуты и секунды, так как нет шансов, что сумма превысит один месяц) :

function convertDateIntervalToSeconds($dateInterval) 
{ 
    $days = $dateInterval->d * 24 * 60 * 60; 
    $hours = $dateInterval->h * 60 * 60; 
    $minutes = $dateInterval->i * 60; 
    $seconds = $dateInterval->s; 

    return $hours + $minutes + $seconds; 
} 
Смежные вопросы