PHP DATETIME in einzelne Elemente zerlegen

hemorieder

Lieutenant
Dabei seit
März 2003
Beiträge
602
Hola,

ich habe folgendes Problem:

In einer mysql Datenbank ist ein Datum mit Uhrzeit als DATETIME gespeichert.
Nun möchte ich dieses Datum auslesen, und auf die einzelnen Faktoren zugreifen.

In Form von:

Aus Original (mysql)
Code:
2012-11-26 22:30:00
Soll werden (php)
Code:
$datum_tag = 26;
$datum_monat = 12;
$datum_jahr = 2012;
$zeit_stunde = 22;
$zeit_minute = 30;
$zeit_sekunde = 00;
Irgendwie hab ich keinen Plan wie ich das anstelle...

Wäre toll wenn ihr mir helfen könntet.

lg
 

Ocram1992

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
504
entweder mit einer Funktion (kenne nur gerade keine) oder du schreibst dir eine Funktion mit einer regulären Expression und gibst das ganze dann als Array zurück ;)

Pseudomäßig:

Code:
regex = "/([0-9]{4})\-([0-9]{2})\-([0-9]{2})\s([0-9]{2})\:([0-9]{2})\:([0-9]{2})/"
// funktion zum matchen
return array($wert3, $wert2, $wert1, $wert4, $wert5, $wert6);
oder du arbeitest mit explode() und teilst den String einmal am Leerzeichen, und die zwei neuen Strings einmal zwischen "-" und einmal zwischen ":", dann hast du auch 6 Werte, die du dann in einem Array zurückgeben kannst. Sollte schneller sein als Reguläre Ausdrücke ;)
 
C

carom

Gast
Fange einen Schritt weiter vorne an.

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');
-> 1196440219

Dann mit PHP date damit machen was du willst.

Falls unbedingt in PHP, dann

$date = DateTime::createFromFormat('Y-m-d H:i:s', '2009-02-15 15:16:17');
Für PHP < 5.3 siehe Yuuri, Resultat ist ähnlich verwertbar.


Aber um Gottes Willen keine Stringmanipulation wie vorgeschlagen :rolleyes: Post #2 und #3 lieber ganz schnell vergessen, auch wenn's sicher gut gemeint war.
 
Zuletzt bearbeitet:

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.632
Ich würde aber eher die elegantere Variante von carom verwenden und so wenig wie möglich innerhalb des Scripts irgendwie manipulieren. Lieber die Daten so bekommen, wie sie erwartet werden, entsprechend weiterverarbeiten und an die nächste Ebene (Template Engine bspw.) wieder vorformatiert geben (in Smarty bspw. könntest du auch Timestamps übergeben und date als Modifier nutzen).
 

voodoo44

Lieutenant
Dabei seit
Apr. 2006
Beiträge
768
Code:
regex = "/([0-9]{4})\-([0-9]{2})\-([0-9]{2})\s([0-9]{2})\:([0-9]{2})\:([0-9]{2})/"
// funktion zum matchen
return array($wert3, $wert2, $wert1, $wert4, $wert5, $wert6);
oder du arbeitest mit explode() und teilst den String einmal am Leerzeichen, und die zwei neuen Strings einmal zwischen "-" und einmal zwischen ":", dann hast du auch 6 Werte, die du dann in einem Array zurückgeben kannst.
Bitte sowas NIEMALS machen!
Das ist total langsam und fehleranfällig!
 
Top