Сума от две дати в PHP

как мога да събера две дати?

Имам две дати в този формат j h:i:s и бих искал да ги сумирам

Намерих този скрипт, но няма справка за дни и съм нов в това, ето го скрипта, може би някой може да направи необходимите промени.

<?php

/**
 * @author Masino Sinaga, http://www.openscriptsolution.com
 * @copyright October 13, 2009
 */

echo sum_the_time('01:45:22', '17:27:03');  // this will give you a result: 19:12:25

function sum_the_time($time1, $time2) {
  $times = array($time1, $time2);
  $seconds = 0;
  foreach ($times as $time)
  {
    list($hour,$minute,$second) = explode(':', $time);
    $seconds += $hour*3600;
    $seconds += $minute*60;
    $seconds += $second;
  }
  $hours = floor($seconds/3600);
  $seconds -= $hours*3600;
  $minutes  = floor($seconds/60);
  $seconds -= $minutes*60;
  return "{$hours}:{$minutes}:{$seconds}";
}

?>

Употреба:

Всичко, от което се нуждая, е да сумирам две дати от две задачи като: Задача 1 ще отнеме 1 ден 10 часа 20 минути 10 секунди Задача 2 ще отнеме 3 дни 17 часа 35 минути 40 секунди

така че резултатът ще бъде общото време между задача 1 и две


person Daniel    schedule 08.09.2011    source източник
comment
Добавянето на две дати няма много смисъл. Не мога да се сетя за някакво разумно значение за today + tomorrow, например. Наистина има смисъл да добавите дата и продължителност, давайки дата (today + 7 days), или да изваждате датите, давайки интервал (today - yesterday == 1 day).   -  person Keith Thompson    schedule 08.09.2011
comment
@Daniel: Искате ли да сумирате две дати или две продължителности?   -  person Toto    schedule 08.09.2011


Отговори (2)


просто преобразувайте датите с помощта на strtotime и сумирайте времевите марки, след което преобразувайте отново в датата, като използвате функцията за дата:

$tmstamp = strtotime($date1) + strtotime($date2);
echo date("Y m d", $tmstamp) ;

но защо бихте добавили две дати на първо място?

person Headshota    schedule 08.09.2011
comment
Редактирам въпроса, така че се надявам да е лесен за разбиране. Мисля, че вашият код не работи, защото получавам едни и същи стойности ($tmstamp е един и същ през цялото време) - person Daniel; 08.09.2011

Основно това, което правят, е да преобразуват часове и минути в секунди и да ги добавят. След това те се преобразуват обратно в часове/минути.

Просто трябва да преобразувате и дните в секунди:

$seconds += $days * 3600 * 24 

и след това конвертирайте обратно:

$days = floor($seconds/(3600*24));
$seconds -= $days*3600*24
person Atheist    schedule 08.09.2011