Avatar billede nyb Nybegynder
27. december 2001 - 18:29 Der er 10 kommentarer og
1 løsning

Ændre datoformat?

Hej!
Har en tabel hvor datofeltet oprindeligt (importeret fra en access db) er et tekstfelt, hvor datoen har formatet 21.12.2001.
Jeg har brug for et datoformat der ser ud som dette:
21 december 2001.
Kan det lade sig gøre at konvertere til sådant et format??
Avatar billede dcoder Nybegynder
27. december 2001 - 19:01 #1
Ja da, med PHP, højest sandsynligt ikke i mySQL alene

$dato = mysql_query(\"SELECT dato FROM tabel LIMIT 1\");

while ($datoen = mysql_fetch_row($dato)) {
  $dato_arr = explode(\".\", $datoen[0]);

  if ($dato_arr[1] == \"1\") {
    $dag = $dato_arr[0];
    $maaned = \"Januar\";
    $aar = $dato_arr[2];
  }
}

Dette er kun et lille eksempel, det skal lige arbejdes lidt med, gad ikke sidde og skrive alle 12 måneder ind ;)
Avatar billede dcoder Nybegynder
27. december 2001 - 19:07 #2
$dato = mysql_query(\"SELECT dato FROM tabel\");

while ($datoen = mysql_fetch_row($dato)) {
  $dato_arr = explode(\".\", $datoen[0]);

  if ($dato_arr[1] == \"1\") {
    $maaned = \"Januar\";
  }

  $dag = $dato_arr[0];
  $aar = $dato_arr[2];
  $ny_dato = $dag . $maaned . $aar;
  mysql_query(\"UPDATE tabel SET dato = \'$ny_dato\' WHERE dato = \'$datoen[0]\'\");
}

Sådan, rettede lige lidt :) Det skulle virke
Avatar billede novellenet.dk Nybegynder
27. december 2001 - 21:34 #3
Kig engang her:
http://php.net/mktime
http://php.net/date
Med de to funktioner, og eregi_replace() eller explode(), kan du stort set gøre hvad som helst...

Eksempel:
<?
$dato = \"21.12.2001\";
$dato_arr = explode(\".\",$dato);
$timestamp = mktime(12,0,0,$dato_arr[1],$dato_arr[0],$dato_arr[2]);
$fin_dato = date(\"j. F Y\",$timestamp);

echo $fin_dato;
?>
Det vil outputte:
21. December 2001

BEMÆRK: Månedsnavnene vil være engelske, men du kan sagtens lave dem om til dansk, bare sig til...
Avatar billede nyb Nybegynder
27. december 2001 - 22:06 #4
Hej!
Tak for svarene!. Jeg er bare ikke helt med på hvordan jeg skal gøre det i praksis.
Ændrer det alle 3700 poster i tabellen og hvordan skal jeg køre scriptet?. (Læg lige mærke til mit brugernavn!)
Avatar billede novellenet.dk Nybegynder
27. december 2001 - 22:13 #5
Nej, det ændrer kun outputtet, indholdet af db vil stadig være det samme...
Men hvis du så propper nye datoer ind i db, vil det være en god ide at putte dem ind som det oprindelige format, altså: 21. 12 2001
Avatar billede nyb Nybegynder
27. december 2001 - 22:15 #6
Ok, skal koden køres som en del af den eksisterende forespørgsel?
Avatar billede novellenet.dk Nybegynder
27. december 2001 - 22:19 #7
I praksis, skal du (i mit eksempel) lade $dato være det du trækker ud af databasen. og resten vil så klare sig selv, og du vil så have den pæne dato i variablen $fin_dato, som du så selvfølgelig outputter...

For at gøre det endnu lettere, jeg laver det lige som en funktion...
<?
function lav_dato_om($dato){
    $dato eregi_replace(\" \",\"\",$dato);
    $dato_arr = explode(\".\",$dato);
    $timestamp = mktime(12,0,0,$dato_arr[1],$dato_arr[0],$dato_arr[2]);
    $fin_dato = date(\"j. F Y\",$timestamp);

    return $fin_dato;}

// Nu skal du bare gøre sådan her når du skal outputte den fine dato...

$dato = \"21. 12. 2001\";
echo lav_dato_om($dato);
?>
Avatar billede nyb Nybegynder
27. december 2001 - 22:26 #8
Jeg skal faktisk bruge datoen i 12 januar 2002 format i databasen, da jeg har brug for at søge direkte på månedens navn. Det kan jeg jo ikke hvis den først bliver ændret bagefter!?.
Avatar billede novellenet.dk Nybegynder
27. december 2001 - 22:55 #9
Jamen, så må du jo en gang for alle ind og ændre det i databasen...
Affyr følgende script een gang, så skulle den være på plads...

<?
// Sæt de her variabler før du gør noget...
$db_host = \"MySQL-host\";
$db_user = \"dit brugernavn til MySQL-db\";
$db_pass = \"dit password til MySQL-db\";
$db_db = \"navnet på din database\";
$db_table = \"navnet på tabellen som det skal ændres i\";
$db_col = \"navnet på kolonnen i db. som indeholder datoen\";

// Selve scriptet...
// Connecter til MySQL.
$db = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_db);

// Henter datoer.
$q = mysql_query(\"SELECT id,$db_col FROM $db_table\");
while($row = mysql_fetch_row($q)){

// Ændrer datoer.
    $dato_arr = explode(\".\",$row[1]);
    $timestamp = mktime(12,0,0,$dato_arr[1],$dato_arr[0],$dato_arr[2]);
    $fin_dato = date(\"j. F Y\",$timestamp);

// Putter de nye formater ind i MySQL.
    $t = mysql_query(\"UPDATE $db_table SET $db_col=\'$fin_dato\' WHERE id=\'$row[0]\"};

// Outputter status af handlingerne.
    if(isset($t))
        echo \"Kolonnen med id: $row[0] er opdateret.\\n<br>\";
    else
        echo \"Kolonnen med id: $row[0] kunne ikke opdateres\\n<br>\";
}

// Lukker forbindelse til MySQL.
mysql_close($db);?>

ADVARSEL:
TJEK HELLERE LIGE DET HER KODE IGENNEM, ELLER FÅ EN TIL DET, FOR JEG HAR IKKE TESTET DET, OG JEG ER LIDT TRÆT, SÅ TÆNKT DIG OM FØR DU UDEN VIDERE AFFYRER DET...
DET KAN ALTSÅ FUCKE DIN DATABASE SERIØST OP...
ISÆR HVIS DU ANGIVER DE FORKERTE VÆRDIER I DE FØRSTE VARIABLER...
Avatar billede nyb Nybegynder
27. december 2001 - 23:08 #10
Ok, tak for hjælpen. Prøver arbejde lidt med det!
Avatar billede novellenet.dk Nybegynder
28. december 2001 - 01:01 #11
Det var så lidt...
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
Computerworld tilbyder specialiserede kurser i database-management

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