05. september 2001 - 08:42
Der er
12 kommentarer og 2 løsninger
konvertering af dato fra apache log file
Hejsa, jeg har en data (fra en apache access log) der ser således ud. [31/Aug/2001:08:26:55 +0200] Den vil jeg gerne. (via perl eller php) ha lavet som til: 2001-08-31 08:26:55 altså sql datetime format... help :)
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
05. september 2001 - 14:46
#1
Sådan noget i denne stil ?? $maaned[\'Jan\']=\'01\'; //... $maaned[\'Aug\']=\'08\'; //... $maaned[\'Dec\']=\'12\'; $apache = \"[31/Aug/2001:08:26:55 +0200]\"; function convert($maan) { global $maaned; return $maaned[$maan]; } $ny = preg_replace(\"/^\\[([0-9]+)\\/([a-z]+)\\/([0-9]+):([0-9]+):([0-9]+):([0-9]+).*/ie\",\"\'\\\\3-\'.convert($2).\'-\\\\1 \\\\4:\\\\5:\\\\6\'\",$apache); print $ny;
05. september 2001 - 23:18
#2
erikjcobsen>> rart at se, at du trods alt ikke kan holde dig helt væk! Mvh Jesper Naur
05. september 2001 - 23:37
#3
:) Hils Thorkild...
05. september 2001 - 23:41
#4
Det skal jeg gøre, men han staves uden \"d\"!
05. september 2001 - 23:58
#5
Åh ja, min fejl. Vi kalder ham bare for tyf, ik\' ?
06. september 2001 - 23:20
#6
hvad hvis den skal erstatte noget i en længere streng.f.eks. en line fra en logtil hvor den kun skal ændre datoen ?
06. september 2001 - 23:21
#7
..men lade alt andet være intakt ?
06. september 2001 - 23:31
#8
$ny = preg_replace(\"/\\[([0-9]+)\\/([a-z]+)\\/([0-9]+):([0-9]+):([0-9]+):([0-9]+).*?\\]/ie\",\"\'\\\\3-\'.convert($2).\'-\\\\1 \\\\4:\\\\5:\\\\6\'\",$apache);
06. september 2001 - 23:58
#9
hmmm, kan det passe at jeg ikke kan få den til at printe paranteser \" ..selv om jeg escaper dem med \\\" i det jeg erstatter ? f.eks.: \"\\\"\'\\\\3-\'.convert($2).\'-\\\\1 \\\\4:\\\\5:\\\\6\'\\\"\"
07. september 2001 - 01:20
#10
Her er lidt sort magi ;) <? function doDate($date) { for ($i=1;$i<13;$mon[substr(date(\"F\",mktime(0,0,0,$i,1,2001)),0,3)]=$i++); $t = explode(\" \",preg_replace(\'/\\[([^\\/]+)\\/([^\\/]+)\\/([^:]+):([^:]+):([^:]+):([^\\s]*) (\\-|\\+)([0-9]{2})([0-9]{2})\\]/s\',\"\\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7 \\\\8 \\\\9\",$date)); return date(\"Y-m-d H:m:s\",gmmktime($t[3],$t[4],$t[5],$mon[$t[1]],$t[0],$t[2])); } echo doDate(\"[31/Aug/2001:08:26:55 +0200]\"); ?>
07. september 2001 - 01:21
#11
Det skal siges at den vil fortolke 31/Aug/2001:08:26:55 +0200 til 2001-08-31 10:08:55 - det er korrekt da apacheformatet angiver tiden i GMT (derfor +0200) :)
07. september 2001 - 01:22
#12
Undskyld, det er lidt \"obfuscated\" - men jeg kunne ikke lade være ;)
07. september 2001 - 06:42
#13
darkmoon: du skal nok sætte lidt ekstra \\ foran, altså \\\\\" Hedder sådan nogen paranteser?
07. september 2001 - 07:21
#14
takker, jeg prøver..øhem, dunno, jeg kan ikke stave :) ...det har jeg bevis på :)
Kurser inden for grundlæggende programmering