funkervogt
Goto Top

PHP strtotime ändert einen String komischerweise in das aktuelle Datum..aber warum.

Hallo Gemeinde,

wie schon in der "Schlagzeile beschrieben habe ich da ein klitzekleines Problem.

Ich lese eine CSV mit 3 Spalten (Datum, Uhrzeit und einem Wert) ein um diese
dann in eine MySQL Datenbank zu portieren.

Bekanntlich muss dazu das Datumsformat geändert werden, nur "wie beschrieben"
tut es das nicht.

Die Zeilen in der CSV Datei haben das Format:
01.09.13 ;00:30 ; 0,000;C ; ;


 
<?
$row = 1;
if (($handle = fopen("orig2.csv", "r")) !== FALSE) {  
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {  
        $row++;
		$date = $data;
                $time = $data[1];
                $count = $data[2];
echo $date;
echo "<br /></p>\n";  
$myDate = date("Y-m-d", strtotime($data));   
echo $myDate;
echo $time;
echo $count;
echo "<br /></p>\n";  

?> 

Natürlich sind das Zwischenausgaben um das Ergebnis zu vergleichen.

Die Ausgabe ist:

01.09.13

2013-09-0200:30 0,000


aber warum? Ich finde den Fehler nicht!


Vielen Dank im voraus!

Content-ID: 215876

Url: https://administrator.de/contentid/215876

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

colinardo
colinardo 02.09.2013, aktualisiert am 03.09.2013 um 08:01:57 Uhr
Goto Top
Hallo FunkerVogt,
dein Problem liegt in der Funktion strtotime() die nur englisch formatierte Date-Strings akzeptiert. Da dein Datum deutsch formatiert ist, liefert es anstatt eines Fehlers das aktuelle Datum zurück!
Du musst deinen Datums-String zerlegen und z.B. in diesem Format an die Funktion übergeben yyyy/mm/dd
oder du nutzt diese Funktion: http://php.net/manual/en/datetime.createfromformat.php
$mydate = date_format(date_create_from_format('d.m.y',$data), 'Y-m-d');

Grüße Uwe
FunkerVogt
FunkerVogt 03.09.2013 um 15:21:46 Uhr
Goto Top
Alles klärchen... jetzt passt das!
Gleich mit Datenbank getestet! face-smile


if (($handle = fopen("orig2.csv", "r")) !== FALSE) {  
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {  
        $row++;
			$date = $data;
				$curday = explode(".", $date); // getrennt per explode in $currday-Array  
					$curday[2]=substr($curday[2], 0, -2); //Leerzeichen abgetrennt
					$upday = "20".$curday[2]."-".$curday[1]."-".$curday;  
echo " per explode getrennt und neu zusammengesetzt:____" .$upday;  
$myDate = date("Y-m-d", strtotime($upday));   
echo "<br />";  
echo " per strtotime in MySQL-taugliches Format gebracht:  " .$myDate;  
echo "<br /></p>\n";  
$time = $data[1];
$count = $data[2];

echo $time;
echo "<br />";  
echo $count;
echo "<br />";  


Dankeeeee!!


Gruss

Uwe