2016-04-21 16 views
1

Ich versuche, den Unterschied in der Zeit zwischen zwei gegebenen Zeiten zu erhalten, z.B. Erstmals '17: 00: 01' und dann zweites Mal '17: 47: 25' und hier ist was ich bisher versucht,erhalten Sie den Unterschied in der Zeit zwischen zwei gegebenen Zeit

$start_time = "17:00:01"; 
$end_time = "17:47:25"; 

echo $start_time->diff($end_time); 

scheint aber die leider nicht funktioniert, jede Hilfe, Ideen bitte?

Meine erwartete Ausgabe muss sein, wenn kein Unterschied in Stunden, aber es gibt Unterschied in Minuten und Sekunden dann, "22 Minuten und 15 Sekunden", wenn kein Unterschied in Minuten aber Unterschied in Stunden dann "2 Stunden und 10 Sekunden, aber wenn nur Sekunden im Unterschied, dann "22 Sekunden".

+1

müssen Sie benutzerdefinierte Code dafür. –

+1

Es sieht so aus, als ob Sie versuchen, http://php.net/manual/en/datetime.diff.php zu verwenden, aber in Ihrem Beispiel fehlt die Initialisierung. –

+1

Welches Ergebnis bekommst du? Haben Sie versucht, ein Datum vor den Zeiten hinzuzufügen? Haben Sie versucht, die Funktion 'Date()' zum Formatieren des Ergebnisses zu verwenden? Haben Sie versucht, die DateTime-Klasse zu verwenden? – starshine531

Antwort

2

String in PHP ist kein Objekt, so kann diff Methode darauf nicht aufrufen.

Verwenden Sie diff Methode, müssen Sie die Zeichenfolge in DateTime Objekt ändern.

Wenn Sie Zeitdifferenz in gleichen Tag vergleichen wollen, können Sie versuchen:

$start_time = "17:00:01"; 
$end_time = "17:47:25"; 

$start_datetime = new DateTime(date('Y-m-d').' '.$start_time); 
$end_datetime = new DateTime(date('Y-m-d').' '.$end_time); 

var_dump($start_datetime->diff($end_datetime)); 
+0

Ja richtig das ist es, ich muss es zu einem Objekt machen –

2

Hier ist es.

PHP

$start_time = "17:00:01"; 
$end_time = "17:47:25"; 

$time1 = new DateTime($start_time); 
$time2 = new DateTime($end_time); 
$interval = $time1->diff($time2); 

echo $hour = $interval->format('%h hour'); 
echo $min = $interval->format('%i min'); 
echo $sec = $interval->format('%s second'); 

Ausgang:

0 hour 47 min 24 sec 

Jetzt können Sie eine Bedingung hinzufügen und das Real-Format machen.

1

Nur ein weiterer Weg, es zu tun String-Funktionen mit:

/* 
* Get difference in seconds between time formats 
*/ 
function getDiff($start_time, $end_time) 
{ 
    $start_time = timeFormatToSeconds($start_time); 
    $end_time = timeFormatToSeconds($end_time); 

    if ($end_time > $start_time) { 
     return $end_time - $start_time; 
    } 

    return false; 
} 

/* 
* Convert time format (HH:MM:SS) to seconds 
*/ 
function timeFormatToSeconds($time_format) 
{ 
    sscanf($time_format, "%d:%d:%d", $hours, $minutes, $seconds); 

    return $hours * 3600 + $minutes * 60 + $seconds; 
} 

$start_time = "17:00:01"; 
$end_time = "17:47:25"; 

$diff = getDiff($start_time, $end_time); 

if ($diff) { 
    $hours = floor($time/(60 * 60)); 
    $time -= $hours * (60 * 60); 

    $minutes = floor($time/60); 
    $time -= $minutes * 60; 

    $seconds = floor($time); 
    $time -= $seconds; 

    var_dump(array($hours, $minutes, $seconds)); 
} 
1

Convert String Zeit zu und zu subtrahieren. Konvertieren Sie den Zeitstempel in das gewünschte Zeitformat.

$start_time = strtotime('17:00:01'); 
$end_time = strtotime('17:47:25'); 
$diff = $end_time - $start_time; 
echo date('H:i:s', $diff); 
+0

Seine Rückkehr 19: 47: 24.Ist es richtig? –

Verwandte Themen