Avatar billede darkmoon Nybegynder
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 :)
Avatar billede erikjacobsen Ekspert
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;
Avatar billede jespernaur Nybegynder
05. september 2001 - 23:18 #2
erikjcobsen>> rart at se, at du trods alt ikke kan holde dig helt væk!
Mvh
Jesper Naur
Avatar billede erikjacobsen Ekspert
05. september 2001 - 23:37 #3
:) Hils Thorkild...
Avatar billede jespernaur Nybegynder
05. september 2001 - 23:41 #4
Det skal jeg gøre, men han staves uden \"d\"!
Avatar billede erikjacobsen Ekspert
05. september 2001 - 23:58 #5
Åh ja, min fejl. Vi kalder ham bare for tyf, ik\' ?
Avatar billede darkmoon Nybegynder
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 ?
Avatar billede darkmoon Nybegynder
06. september 2001 - 23:21 #7
..men lade alt andet være intakt ?
Avatar billede erikjacobsen Ekspert
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);
Avatar billede darkmoon Nybegynder
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\'\\\"\"
Avatar billede coderdk Praktikant
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]\");
 
?>
Avatar billede coderdk Praktikant
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)

:)
Avatar billede coderdk Praktikant
07. september 2001 - 01:22 #12
Undskyld, det er lidt \"obfuscated\" - men jeg kunne ikke lade være ;)
Avatar billede erikjacobsen Ekspert
07. september 2001 - 06:42 #13
darkmoon: du skal nok sætte lidt ekstra \\ foran, altså \\\\\"

Hedder sådan nogen paranteser?
Avatar billede darkmoon Nybegynder
07. september 2001 - 07:21 #14
takker, jeg prøver..øhem, dunno, jeg kan ikke stave :) ...det har jeg bevis på :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester