2012-07-30 14 views
5

W mojej aplikacji PHP chcę obliczyć sumę dwóch zmiennych czasowych. Szukam czegoś podobnego do tego przykładu.PHP dodać dwie zmienne czasowe

$time1 = 15:20:00; 
$time2 = 00:30:00; 
$time = $time1+$time2; 
+4

Jak próbowałeś to zrobić? – Fluffeh

+1

Czy masz przykłady, jak powinny wyglądać twoje wyniki? – Pete

+1

Klasy DateTime i DateInterval. http://www.php.net/manual/en/book.datetime.php – dnagirl

Odpowiedz

3

Najlepszym sposobem na to jest najbardziej prawdopodobne, aby użyć strtotime je konwertować do znaczników czasu, a następnie wykonaj zsumowanie:

$o = strtotime($time1)+strtotime($time2);

Jeśli dobrze pamiętam strtotime nie obsługuje tego formatu.

W przeciwnym razie będziesz musiał sam go odfiltrować.

+0

Wynik powinien dodać bieżący czas + zmienną czasową, którą biorę od DB powiedzieć $ tim2 – Rakesh

+0

'czas() + strtotime ($ mysql_date); 'works – Sammaye

+0

$ time = date (" H: i: s ") + strtotime ($ mysql_time); masz na myśli w ten sposób ..? – Rakesh

-1

Kod:

$time1 = '15:20:00'; 
$time2 = '00:30:00'; 
$time = strtotime($time1)+strtotime($time2); 
$sumtime = date("H:i:s",$time); 
+0

Witaj, jak dodać aktualny czas + $ time2 ..? – Rakesh

+0

Ten powinien zwrócić '15: 50: 00', ale zwraca' 09: 21: 44' –

+0

Czy próbowałeś tego? – Kashyap

2

Można użyć PHP 5.3 DateInterval:

$timeInterval = DateInterval::createFromDateString('15 hours + 20 minutes'); 
$timeInterval2 = DateInterval::createFromDateString('30 minutes'); 

foreach(str_split('ymdhis') as $prop) 
{ 
    $timeInterval->$prop += $timeInterval2->$prop; 
} 
var_dump($timeInterval->format('%H:%i:%s')); 

(Jak dodać do obiektów DateInterval zostało wyjaśnione tutaj: How we can add two date intervals in PHP)

0

miarę Mogę powiedzieć, że odpowiedź Sammaye nie zadziałała.

Potrzebowałem rozpocząć godzinę, którą chciałem dodać wraz z początkiem znacznika czasu UNIX. W ten sposób strtotime zwraca sekundy, które należy dodać za pierwszym razem.

$time1 = "15:20:00"; 
$time2 = "1970-01-01 00:30:00"; 
$time = strtotime($time1) + (strtotime($time2) + 3600); 
echo $time . "<br />"; 
echo date("H:i:s", $time); 
0

Pamiętaj, aby zapoznać się z mistycznymi docs http://us1.php.net/strtotime dodatkowych rzeczy, które można wprowadzić do swoich funkcji :)

$today = time(); 
$tommorrow = strtotime("+1 days", $today); 
$day_after_tomorrow = strtotime("+1 days", $tomorrow); 
3

Jeśli odpowiedź można się spodziewać jest 15:50:00 i chcesz używać strtotime i date funkcje, musisz odjąć sekundy od udostępnienia udziałów $time1 i $time2, gdy przekształcisz je w znaczniki czasu unix:

$time1 = '15:20:00'; 
$time2 = '00:30:00'; 
$time = strtotime($time1) + strtotime($time2) - strtotime('00:00:00'); 
$time = date('H:i:s', $time); 
+2

To jest świetne i proste, ale byłoby bardziej istotne, jeśli możesz podać dalsze wyjaśnienia dotyczące odjęcia tego 0 wartości czasu. – rhavendc

4

Następująca odpowiedź nie zwraca poprawnej wartości. Podsumowuje liczby całkowite, ale nie zwraca właściwego czasu.

$ o = strtotime ($ time1) + strtotime ($ time2);

Utworzono funkcję, aby uzyskać obliczony czas w następujący sposób.

public function addTwoTimes($time1 = "00:00:00", $time2 = "00:00:00"){ 
     $time2_arr = []; 
     $time1 = $time1; 
     $time2_arr = explode(":", $time2); 
     //Hour 
     if(isset($time2_arr[0]) && $time2_arr[0] != ""){ 
      $time1 = $time1." +".$time2_arr[0]." hours"; 
      $time1 = date("H:i:s", strtotime($time1)); 
     } 
     //Minutes 
     if(isset($time2_arr[1]) && $time2_arr[1] != ""){ 
      $time1 = $time1." +".$time2_arr[1]." minutes"; 
      $time1 = date("H:i:s", strtotime($time1)); 
     } 
     //Seconds 
     if(isset($time2_arr[2]) && $time2_arr[2] != ""){ 
      $time1 = $time1." +".$time2_arr[2]." seconds"; 
      $time1 = date("H:i:s", strtotime($time1)); 
     } 

     return date("H:i:s", strtotime($time1)); 
    } 
+0

Tak, twój scenariusz był nieco bardziej skomplikowany i wymagał większego wykorzystania strototime – Sammaye

+0

Tak. To prawda. Możemy użyć tego rodzaju rozwiązania, aż znajdziemy lepsze podejście do rozwiązania tego problemu – cha