Avatar billede cyberdude Nybegynder
29. oktober 2006 - 12:50 Der er 11 kommentarer og
1 løsning

Lave dato om til timestamp

Hejsa

Jeg har i en variable ($regs) følgende data :
03:31:28 Oct 29, 2006 PST

Denne dato vil jeg gerne have lavet om til et timestamp - dog UDEN tiden! dvs. kun datoen
i eksemplet :
mktime(0, 0, 0, 10, 29, 2006);

Hvad er det jeg skal bruge, er det noget preg_match sammen med at måneds array ??

$months = array(
    'Jan'=>1,
    'Feb'=>2,
    'Mar'=>3,
    'Apr'=>4,
    'May'=>5,
    'Jun'=>6,
    'Jul'=>7,
    'Aug'=>8,
    'Sep'=>9,
    'Oct'=>10,
    'Nov'=>11,
    'Dec'=>12
  );
Avatar billede jensgram Nybegynder
29. oktober 2006 - 12:57 #1
Ja, det kunne du gøre.

Men ville det ikke være lettere med strtotime og så bare hive år, mnd og dag ud fra den resulterende dato?

$date = strtotime($regs);
print date('Y-m-d', $date);
Avatar billede cyberdude Nybegynder
29. oktober 2006 - 13:00 #2
jo det ville det sikert - men kendte ik´ke lige den funktion :-)

Prøver det lige!
Avatar billede cyberdude Nybegynder
29. oktober 2006 - 13:03 #3
okay, det funger næsten...

Et lille tjek på om den linie der skal oversættes indeholder PST ville være rart, da det køre gennem en while lykke, og der er ca. 10 linier der kommer ud fra $regs, så lige nu ser det underligt ud, da ALLE linier har en 1970-01-01 FORAN sin oprendelige værdi - dog har den linie med datoen den korekte dato...
Avatar billede jensgram Nybegynder
29. oktober 2006 - 13:04 #4
Ellers:


function month2int($month) {
  $months = array(
    'Jan'=>1,
    'Feb'=>2,
    'Mar'=>3,
    'Apr'=>4,
    'May'=>5,
    'Jun'=>6,
    'Jul'=>7,
    'Aug'=>8,
    'Sep'=>9,
    'Oct'=>10,
    'Nov'=>11,
    'Dec'=>12
  );
  return $months[$month];
}

function mkdate($matches) {
  $month = month2int($matches[1]);

  return mktime(0, 0, 0, $month, $matches[2], $matches[3]);
}

$ts = preg_replace_callback('/([a-z]{3}) (\d\d?), (\d{4})/i', 'mkdate', $regs);
Avatar billede jensgram Nybegynder
29. oktober 2006 - 13:04 #5
Nå, havde ikke lige reloadet inden min 2. post. Den er også utestet.
Avatar billede jensgram Nybegynder
29. oktober 2006 - 13:05 #6
13:03:59 > Forstår jeg ikke lige?
Avatar billede cyberdude Nybegynder
29. oktober 2006 - 13:22 #7
Har fundet løsningen :
if (preg_match("/PST/i", "$regs[1]")) {
$date = strtotime($regs[1]);
$mydate = date('Y-m-d', $date);
echo "$mydate<br>";
}
Avatar billede cyberdude Nybegynder
29. oktober 2006 - 13:22 #8
smid et svar og du får point :-)
Avatar billede jensgram Nybegynder
29. oktober 2006 - 13:44 #9
Ah - ok. Du bør dog bruge strstr() i stedet for en preg_match, da den kræver færre ressourcer:

if (strstr($regs[1], 'PST')) {
  $date = strtotime($regs[1]);
  $mydate = date('Y-m-d', $date);
  echo $mydate . '<br>';
}
Avatar billede jensgram Nybegynder
29. oktober 2006 - 13:44 #10
Svar.
Avatar billede hmortensen Nybegynder
29. oktober 2006 - 15:28 #11
Man kunne også blot gøre sådan her:
$regs = "03:31:28 Oct 29, 2006 PST";
$ts = strtotime(substr($regs, 9));
Avatar billede jensgram Nybegynder
29. oktober 2006 - 15:30 #12
hmortensen > Hmm, ja det ville vist have været noget lettere ;)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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