Avatar billede ken9 Nybegynder
09. august 2006 - 13:54 Der er 27 kommentarer og
1 løsning

Hente datoen

Hej eksperter!

Jeg har min tid ståede på følgende måde i min database:

09-08-2006 13:00:00

Det er en varchar(255)

Kan jeg nøjes med kun at udskrive datoen, og i så fald hvordan? :-)

På forhånd tak
Avatar billede iss Novice
09. august 2006 - 14:03 #1
Du lader være med at gemme tid i din SQL som varchar, bruge datetime.
Avatar billede ken9 Nybegynder
09. august 2006 - 14:09 #2
Så ændrer den det hele til 0000-00-00 00:00:00 =/
Avatar billede iss Novice
09. august 2006 - 14:11 #3
Klart... du har jo ikke gemt i datetime format, det lære du nok til næøte gang så.
Avatar billede ken9 Nybegynder
09. august 2006 - 14:12 #4
Kan du forklare mig hvordan man gør det? :)
Avatar billede erikjacobsen Ekspert
09. august 2006 - 14:16 #5
Hvis du er opsat på at gøre det "rigtigt", dvs. med et DATETIME felt, når det nu er dato og tid du har, så er der starten på det du skal gøre her: http://zpiff.dk/mysql/fromvarchar
Der er så ikke lige taget højde for tid, kun dato.
Avatar billede iss Novice
09. august 2006 - 14:17 #6
Du opretter et nyt felt med datetime, laver en select på dit gamle og laver indsæt til det nye, så er det meget nemmere...
Avatar billede ken9 Nybegynder
09. august 2006 - 14:21 #7
Den gamle tabels indhold er kun noget test halløj, som ikke skal bruges til noget, så derfor skal jeg bare ændre den til datetime og så tømme den..

Men selvom det er nye posts bliver det altså stadig kun gemt som en masse 0'er.

Jeg skriver datoen til DB'en således:

$time = time() + 7200;
$dato = date("d-m-Y H:i:s", $time );

Skal det ændres? =/
Avatar billede ken9 Nybegynder
09. august 2006 - 14:23 #8
Aha.. det var Y der stod forkert... :-)
Avatar billede ken9 Nybegynder
09. august 2006 - 14:23 #9
Men hvordan hiver jeg så kun datoen ud? :-)
Avatar billede iss Novice
09. august 2006 - 14:25 #10
$dato = explode(" ", $row['dato']);
echo $dato[0];
Avatar billede ken9 Nybegynder
09. august 2006 - 14:27 #11
Tak skal du have :)

smid svar :)
Avatar billede iss Novice
09. august 2006 - 14:32 #12
Nej
Avatar billede ken9 Nybegynder
09. august 2006 - 14:36 #13
Okay.. men der var lige en sidste ting..

kan jeg ændre opstillingen igen, når jeg udskriver det?

så det bliver d-m-Y H:i:s igen?
Avatar billede iss Novice
09. august 2006 - 14:43 #14
?
Avatar billede ken9 Nybegynder
09. august 2006 - 14:51 #15
2006-08-09 14:23:55

står det som i DB'en..

jeg vil gerne have det udskrevet som:

09-08-2006 14:23:55
eller
09-08-06 14:23:55

kan det lade sig gøre? :)
Avatar billede erikjacobsen Ekspert
09. august 2006 - 14:51 #16
Du kan altid tage datetime-feltet fra tabellen, lave til et timestamp, og så bruge date igen:

    print date("d-m-Y H:i:s",strtotime("2006-08-09 14:51:02"));
Avatar billede erikjacobsen Ekspert
09. august 2006 - 14:52 #17
...eller alternativt brug split eller regulære udtryk til at hakke det i stykker, og så lime det sammen i anden rækkefølge bagefter.
Avatar billede erikjacobsen Ekspert
09. august 2006 - 14:59 #18
Og det sidste kan du fx gøre sådan her:

    list ($ye,$mo,$da,$ho,$mi,$se) = split('[:-]',"2006-08-09 14:51:02");
    print "$se $ye $mi $da $mo $ho\n";

Eventuelt vælge en anden rækkefølge ;)
Avatar billede erikjacobsen Ekspert
09. august 2006 - 15:00 #19
Ja, skal nok være
    list ($ye,$mo,$da,$ho,$mi,$se) = split('[ :-]',"2006-08-09 14:51:02");
Avatar billede ken9 Nybegynder
09. august 2006 - 15:16 #20
Jeg fandt en anden løsning..

$datetimevalue = MySQLDateTime2PHPDateTime($row_log['tid']);
formatdatetime($datetimevalue, 'LD');
echo

nogen der kan hælpe med hvordan jeg udskriver den? ;)
Avatar billede erikjacobsen Ekspert
09. august 2006 - 15:18 #21
print ?
Der er vist der kender din MySQLDateTime2PHPDateTime  ;)
Avatar billede erikjacobsen Ekspert
09. august 2006 - 15:18 #22
Der er vist ingen der kender din MySQLDateTime2PHPDateTime  ;)
Avatar billede ken9 Nybegynder
09. august 2006 - 15:22 #23
function FormatDateTime($thedatetime,$resultattype)
{ $MonthName = Array("januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december");
  $WeekDayName = Array("søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag");
  $DayOfWeek = getdate($thedatetime);
  switch (strtoupper($resultattype))
  { case 'SHORTDATE' : return Date('d', $thedatetime)."-".Date('m', $thedatetime)."-".Date('y', $thedatetime);
    case 'LONGDATE'  : return Date('d', $thedatetime)."-".Date('m', $thedatetime)."-".Date('Y', $thedatetime);
    case 'TEXTDATE'  : return $WeekDayName[Date('w', $thedatetime)].", ".Date('d', $thedatetime)." ".$MonthName[Date('m', $thedatetime)-1]." ".Date('Y', $thedatetime);
    case 'SHORTTIME' : return Date('H', $thedatetime).":".Date('i', $thedatetime);
    case 'LONGTIME'  : return Date('H', $thedatetime).":".Date('i', $thedatetime).":".Date('s', $thedatetime);
    case 'DATE_US'  : return Date('m', $thedatetime)."/".Date('d', $thedatetime)."/".Date('Y', $thedatetime);
    case 'REVERSE'  : return Date('Y', $thedatetime)."-".Date('m', $thedatetime)."-".Date('D', $thedatetime);
    case 'TIME_US'  : return Date('h', $thedatetime).":".Date('i', $thedatetime).":".Date('s', $thedatetime)." ".Date('A', $thedatetime);
    case 'SWATCH'    : return Date('B', $thedatetime);
    case 'RFC_2822'  : return Date('r', $thedatetime);
    case 'ISO_8601'  : if(substr(phpversion(),0,1)>4)
                        return Date('c', $thedatetime);  // IF PHP 5+ RETURN ISO 8601 date
                      else
                        return Date('r', $thedatetime);  // RETURN RFC 2822 formatted date instead
    case 'UNIX'      : return Date('U', $thedatetime);
    default : return Date('Y', $thedatetime)."-".Date('m', $thedatetime)."-".Date('d', $thedatetime)." ".Date('H', $thedatetime).":".Date('i', $thedatetime).":".Date('s', $thedatetime);}}

function GenerateCode($codelength)
{ $letters = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                  'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                  '0','1','2','3','4','5','6','7','8','9'); 
  $the_letters = "";
  for ($x=0;$x<($codelength-1);$x++) 
  { $letno = rand(0,count($letters)-1);
    $the_letters .= $letters[$letno];}
  return $the_letters;}
?>
Avatar billede ken9 Nybegynder
09. august 2006 - 15:22 #24
UPS: jeg mente self.

<?php
function MySQLDateTime2PHPDateTime($mysqldt)
{ $y = substr($mysqldt, 0, 4);
  $m = substr($mysqldt, 5, 2);
  $d = substr($mysqldt, 8, 2);
  $h = substr($mysqldt, 11, 2);
  $n = substr($mysqldt, 14, 2);
  $s = substr($mysqldt, 17, 2);
  return mktime($h,$n,$s,$m,$d,$y);}
  ?>
Avatar billede erikjacobsen Ekspert
09. august 2006 - 15:57 #25
Ser ud som en kompliceret måde at løse det problem på, men ok. Kan du så ikke bare:

    print formatdatetime($datetimevalue, 'LD');

bortset fra at 'LD' måske skal være 'LONGDATE'
Avatar billede ken9 Nybegynder
09. august 2006 - 16:57 #26
Tak for hjælpen :-)

smider i nogle svar?
Avatar billede erikjacobsen Ekspert
09. august 2006 - 17:10 #27
Jeg samler slet ikke på point, tak.
Avatar billede ken9 Nybegynder
09. august 2006 - 17:20 #28
OK - men så mange tak for hjælpen da :-)
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