DateInterval Objekt aus String generieren?

03/08/2015 16:20 Reav0r#1
Hi leute,

hab gerade ein kleines Problem, und zwar hab ich das Problem, das ich in einer Tabelle einen haufen von mehreren Zeitwerten habe, also eine Column mit MySQL TIME Values.

Diese hab ich aus 2 zwei Datetime Objekten mit hilfe der DateTime::diff Funktion errechnet und im Format hh:mm:ss in die TIME Felder gespeichert. So jetzt will ich aber aus einigen dieser Felder eine Summe der gesamten Stunden/Minuten/Sekunden errechnen. Dachte waere am einfachsten wenn ich diese wieder in DateInterval Objekte wandle und diese dann addiere, allerdings klappt das nicht so ganz :P

Hat da jemand eine Idee / besseren Lösungsweg? Nutze PHP 5.6 und Laravel Framework
Bin aber noch ziemlicher anfänger sowohl in PHP als auch laravel. Daher fehlt mir hier noch ein wenig der überblick und ich steh vielleicht einfach nur auf dem schlauch :P

Hoffe mir kann jemand helfen.

Gruß
03/10/2015 00:15 Adroxxx#2
Ist irgendwie schwer zu verstehen was du machen willst, ohne zu Wissen was das genaue Ziel ist.

Aber wenn du eh Laravel benutzt, schau dir doch mal Carbon an.
[Only registered and activated users can see links. Click Here To Register...]
03/10/2015 15:16 Reav0r#3
Danke für den Tipp, werde ich mir mal anschauen.

Nun also machen möchte ich folgendes:

Ich möchte von mehreren "Zeitaufzeichnungen" die Dauer dieser Aufzeichnungen zusammen rechnen. Ich dachte am einfachsten wäre das wenn ich beim Abspeichern des Endzeitpunktes direkt die Dauer ausrechne und diese als Time Value in der mysql Datenbank speichere. Die Idee war, das ich diese dann nur zusammen adieren müsste. Das Ergebnis sollte dann auf einer Übersichtsseite ausgegeben werden.

Beispiel:

Aufnahme 1:
Start: 1.1.15 13:00:00 Ende: 1.1.15 14:00:00 Dauer 01:00:00
Aufnahme 2:
Start: 1.1.15 15:00:00 Ende: 1.1.15 18:00:00 Dauer 03:00:00

Die Dauer von den Aufnahmen soll nun addiert werden. also 04:00:00 sollte das Ergebnis sein.

Versucht hatte ich dies mit DateInterval Objekten. Aber da ich von laravel nur "01:00:00" und "03:00:00" als Werte zurück bekomme, konnte ich daraus keine erstellen.
Da dies mein erstes größeres Projekt sowohl mit PHP als auch mit laravel ist, stehe ich da gerade ein wenig auf dem Schlauch wie ich das jetzt lösen könnte.
03/10/2015 19:19 Adroxxx#4
Ja, schau dir am besten Carbon mal genauer an.
Du könntest beim Start einfach Carbon::now() aufrufen und beim Ende auch.
Und dann schauen welche Methoden Carbon noch hat und daraus dann das Endergebnis zu generieren.

Du hast halt schöne saubere Objekte bei Carbon und kannst auf die einzelnen Bestandteile zugreifen.

Ansonsten kannst du auch eine eigene Methode schreiben die das ausrechnet bzw. Carbon erweitert.
03/10/2015 22:29 Reav0r#5
Ok danke, werde die ganze Geschichte am Wochenende eh noch mal neu schreiben da ich schlauer weise als ich angefangen hatte auf laravel 4.2 gesetzt hatte...
Da kann ich das direkt mal (hoffentlich) sauberer mit Carbon implementieren :D
03/11/2015 17:52 Adroxxx#6
L5 ist ja auch erst seit kurzem offiziell Released.
Wenn du eh noch nicht so extrem weit bist, würde ich es definitiv auf L5 umschreiben.
L5 ist einfach viel besser :)
03/11/2015 21:42 Cholik#7
PHP Code:
<?php

$val1 
'10:34:09';
$val2 '12:55:00';

$datetime1 = new DateTime($val1);
$datetime2 = new DateTime($val2);

echo 
$datetime1->diff($datetime2)->format('%H:%I:%S');
Ausgabe: 02:20:51

[Only registered and activated users can see links. Click Here To Register...]


Alternativ in mysql:
Code:
SELECT TIMEDIFF('12:55:00', '10:34:09');