Hallo,

Ik probeer een string te converteren naar de gewenste notitie voor een timestamp.
De oorspronkelijke notitie (string) is: "11-1-12 10:46:53" (let ook op dubbele spatie)

De gewenste notie is: "jjjj-mm-dd hh:mm:ss" (1 spatie ertussen), dus in onderstaand voorbeeld wil als resultaat: "2012-01-11 10:46:53", maar ben hier nu kompleet de weg kwijt, onderstaande geeft een onjuist resultaat:

<?php
$datatimestamp = "11-1-12 10:46:53";
echo $datatimestamp."<br>"; // resultaat: "11-1-12 10:46:53"
$newdate = preg_replace(
"/(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2}):(\d{2})/i",
"$3-$2-$1 $4:$5:$6",
$datatimestamp
);
echo $newdate."<br>"; // resultaat: "11-1-12 10:46:53"
?>

Heeft iemand een idee waar de fout zit en/of hoe het anders kan?
date("Y-m-d H:i:s', time());
@ Smur f :-) dat is precies waar ik naar heb gezocht, maar niet kon vinden! Ik ga hier even verder mee puzzelen, dank je!

@ Gunther, je voorbeeld gaat alleen op voor huidige systeemtijd die je als juiste (default) waarde verkrijgt uit php, maar als ik de timestamp uit mijn voorbeeld gebruik komt ook hier een onjuist resultaat omdat ik geen juiste tijd kan formuleren uit de originele timestamp string. Dit laatste is ook de bron van mijn probleem, het format van de originele timestamp moet eerst worden gewijzigd.

<?php
$newdate = "11-1-12 10:46:53";
$newtime = strtotime($newdate);
$newdate = date("Y-m-d H:i:s", time($newtime));
echo $newdate."<br>"; // resultaat: "2012-01-12 11:11:44"
?>
Gewoon met [php]strtotime[/php] en [php]date[/php] werkt toch?
<?php
$time = '11-1-12 10:46:53';
$newTime = date("Y-m-d H:i:s", strtotime($time));
echo $newTime.PHP_EOL;
?>
Hierbij de oplossing, met dank aan grote smur f :-)

<?php
$newdate = "06/01/12 09:42";
echo "origineel: ".$newdate."<br>"; // resultaat: "origineel: 06/01/12 09:42"

$date = date_create_from_format('d/m/y H:i', $newdate);
$newdate = date_format($date, 'Y-m-d H:i:s');

echo "aangepast: ".$newdate."<br>"; // resultaat: "aangepast: 2012-01-06 09:42:00"
?>
Voor zover ik zie werkt mijn code ook, dit is toch een stuk makkelijker?
Wouter, je hebt gelijk... jouw oplossing werkt en is inderdaad eenvoudiger! Dank je!
Datum 06/01/12 09:42

Resultaat Wouter 2012-06-01 09:42:00
is niet hetzelfde als
Resultaat Marco 2012-01-06 09:42:00
Sterker nog... ik ervaar alsnog problemen nu ik dit tracht te implementeren.
Ik ga via een foreach loop door een array, maar het resultaat is soms onjuist! Hieronder een voorbeeld van de functie van Wouter en Smur F, zoek de verschillen! :-)

<?php
$data[23] = '13/01/12 12:32';
$data[24] = '11/01/12 12:33';


foreach ($data as $id => $value){
$newTime = date("Y-m-d H:i:s", strtotime($value));
$datatimestamp = $newTime.PHP_EOL;

/* debugging: print original and converted header and date */
echo "input string = ".$value."<br>";
echo "output string = ".$datatimestamp."<br>";
}


/* resultaat:

input string = 13/01/12 12:32
output string = 1970-01-01 00:00:00
input string = 11/01/12 12:33
output string = 2012-11-01 12:33:00

*/

foreach ($data as $id => $value){

$date = date_create_from_format('d/m/y H:i', $value);
$datatimestamp = date_format($date, 'Y-m-d H:i:s');

/* debugging: print original and converted header and date */
echo "input string = ".$value."<br>";
echo "output string = ".$datatimestamp."<br>";
}

/* resultaat:

input string = 13/01/12 12:32
output string = 2012-01-13 12:32:00
input string = 11/01/12 12:33
output string = 2012-01-11 12:33:00

*/
?>
Op zich is strtotime() een leuke functie, maar deze maakt zelf een interpretatie van de datum. Door de vele verschillende datum formaten kan die nog wel eens verkeerd gaan.

Reageren