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
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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