Verbesserungvorschlag für Funktion

tobee

Erfahrenes Mitglied
Ich steh gerade auf dem Schlauch und wollte Fragen ob man das auch einfacher machen kann:
PHP:
// Datum in Variablen schreiben
$input = "2007-08-28 15:33:34";
$tmp = string_split($input);

$year = $tmp[0] . $tmp[1] . $tmp[2] . $tmp[3];
$month = $tmp[5] . $tmp[6];
$day = $tmp[8] . $tmp[9];
$hour = $tmp[11] . $tmp[12];
$minute = $tmp[14] . $tmp[15];
$second = $tmp[17] . $tmp[18];
 
Hallo,
so vielleicht:
PHP:
<?php
    $input = '2007-08-28 15:33:34';
    preg_match('/([0-9]+)\-([0-9]+)\-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)/i', $input, $result);
    list(, $jahr, $monat, $tag, $stunde, $minute, $sekunde) = $result;
    echo $jahr.'<br />'.$monat.'<br />'.$tag.'<br />'.$stunde.'<br />'.$minute.'<br />'.$sekunde;
?>

mfg
forsterm
 
PHP:
$tstamp = strtotime("2007-08-28 15:33:34");
//Hier Tag, Monat, Jahr, etc. mit date() ausgeben

Muss nicht geeigneter sein, ist aber ein weiterer Ansatz/Vorschlag :)
 
PHP:
// Datum und Uhrzeit in Variable schreiben
// Danach mit explode trennen --> am Lehrzeichen
$input    =    "2007-08-28 15:33:34";
$input    =    explode(" ", $input);


// Datum trennen in Tag, Monat und Jahr 
$date     =    explode("-", $input[0]);
$year     =    $date[0];
$month    =    $date[1];
$day      =    $date[2];


// Uhrzeit trennen in Stunde, Minute und Sekunde
$time     =    explode(":", $input[1]);
$hour     =    $time[0];
$minute   =    $time[1];
$second   =    $time[2];


print_r($input);
echo "<br/>";
print_r($date);
echo "<br/>";
print_r($time);

Könntest so das ganze 3 Zeilen mit Explode kürzen und dann eben mit den Arrays arbeiten. Wenn du mit den Variablen wieder arbeiten willst, wird es natürlich wieder etwas größer ...
 
Igäls Lösung ist mit Augenmaß die wohl effizienteste Funktion - Die könnte man dann noch über getdate(strtotime("{$input}")) ohne große Probleme aufkapseln.

Als ineffektive Alternativ - da bereits ein paar der Sorte genannt wurden - ginge für das strtotime noch eine Datenbankabfrage à la
PHP:
$result = mysql_query("SELECT UNIX_TIMESTAMP('{$input}');");
list($unixtimestamp) = mysql_fetch_row($result, MYSQL_NUM);
$bits = getdate($unixtimestamp);

Ich glaub sogar, so ist man immer noch effektiver als mit der ganzen Aufspaltung über verschiedene Explodes und Zuweisungen...

Wenn du den Wert als Timestamp aus einer SQL-Datenbank holst, kannst du übrigens auch gleich UNIX_TIMESTAMP verwenden.
 
Mein Beispiel ist natürlich nicht die beste Lösung ^^ um erlich zu sein eine der schlechtesten, aber immerhin noch besser als sein Beispiel und darum ging es ja :)
 
Zurück