Avatar billede Slettet bruger
18. oktober 2003 - 07:30 Der er 26 kommentarer og
1 løsning

Dansk datoformat i funktioner vil ikke som jeg vil.

Hej.

Jeg håber virkelig her er en der kan hjælpe mig med at få dette til at virke. Der udskrives heller ingen fejl fra MySQL eller PHP. Jeg foretrækker en løsning, hvor dette tilpasses så det virker frem for at lave en masse andet, der sikkert gør at andre ting ikke vil samarbejde :-)

Jeg ved ikke om det er til at gennemskue. Jeg kan ihvertfald ikke få det til at fungere som jeg vil. Når jeg bruger funktionerne som de står herunder er det US datoformat, men jeg vil gerne have den til at bruge dansk datoformat.

Jeg har så forsøgt at flytte rundt på variablerne, så det skulle passe efter min mening, men enten skrives der 00/00/0000 ud. Den gemmer ikke datoen, eller den kan finde på at skrive det ud som 00/0000/00, altså helt forkert.

Med US datoformat fungere hele systemet som det skal, men det er jo ikke den rigtige måde at gøre det på. Det skulle da ikke være et problem, at lave datoformatet om så det passer med vores, men jeg kan ikke få den til det. Når der bruges US format gemmes datoen korrekt i databasen. Men flytter jeg rundt gemmes bare nuller ( 0 ).

Det kører på en Redhat 9 med httpd-2.0.40-21.5 - mysql-3.23.58-1.9 - og php-4.2.2-17.2

Men det har vel ikke noget med datoen at gøre ?

Her er de indvolverede funktioner ( eller noget af dem ). Kommentar linierne er fra starten skrevet forkert i de 2 DB_.... funktioner. Systemet er lavet ud fra en bog, og det komplette script kan hentes her: http://support.apress.com/downloads/zips/1191_CS2.zip




    function DB_date2mysql($date){
        // Change a date from US Format (dd/mm/yyyy) to mySQL format
        $temp = explode("/",$date);
        $date = $temp[2] . "-" . $temp[0] . "-" . $temp[1];
        return $date;
    }

       
    function DB_mysql2date($date){
        // Change a date from mySQL (yyyy-mm-dd) to US Format
        $temp = explode("-",$date);
        $date = $temp[1] . "/" . $temp[2] . "/" . $temp[0];
        return $date;
    }   



    function adminNews(){
        $this->date = date("m/d/Y");
....... klippet resten som ikke er date....




function addNewsItem(){
    $this->title = $_POST['title'];
    $this->author = $_POST['author'];
    $this->body = $_POST['body'];
    $this->date = $_POST['date'];
    $mysqlDate = $this->DB_date2mysql($this->date);
    $query = sprintf("INSERT INTO tblnyhed (title, author, date, body)
                      VALUES('%s','%s','%s','%s')"
                    ,addslashes($this->title)
                    ,addslashes($this->author)
                    ,$mysqlDate,addslashes($this->body));
    $this->DB_executeQuery($query, $this->newsLink);
    $this->id = $this->DB_getRecordID();   
}




function showRecord(){
    if($this->id > 0 ){
        $query = sprintf("SELECT id,title,author,date,body
                          FROM tblnyhed WHERE id = %s",$this->id);
        $this->newsResult = $this->DB_executeQuery($query,$this->newsLink);
        $row = mysql_fetch_assoc($this->newsResult);
    $this->title = stripslashes($row["title"]);
    $this->author = stripslashes($row["author"]);
    $this->body = stripslashes($row["body"]);
    $this->date = $this->DB_mysql2date($row["date"]);
    }
}
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 07:43 #1
Tror desværre at du er nødt til at finde dig i den måde hvor på databasen kan håndtere datoer. Jeg har søgt flere steder for at se om man ikke kunne lave den om, uden held.
Men så stort er problemet heller ikke for du kan i din php kode, dele datoen op og lave den til database format og omvendt. Jeg har lavet nedenstående stykke kode til en anden exp bruger forleden:
http://www.bokaj.dk/eksperten/414917.php

Som du også burde kunne bruge - jeg har bare lagt datoen ind i en variabel, men i det fleste tilfælde vil det være noget en bruger indtaster, men det laver ikke nogen forhindringer.
Avatar billede Slettet bruger
18. oktober 2003 - 07:49 #2
Nej jeg ved godt at man kun kan gemme på en måde i mysql, men det skulle kunne rettes til så den dato der er indtastet ( hvis ikke den aktuelle dato som den skriver selv ). Men i de 2 funktioner skulle man netop kunne rette de temp variabler til, skriver de. Men jeg kan bare ikke få den til at gøre det rigtigt.

Dit script virker sikkert fint, men jeg tror ikke jeg kan få det lagt ind så det kan bruges i hele systemet, uden at andre ting vil gå i sort :-) Det er svært at gennemskue, derfor forsøger jeg her.
Avatar billede Slettet bruger
18. oktober 2003 - 07:56 #3
Vil det ikke være noget i denne retning?


$dag = substr($dato,0,2);
$måned = substr($dato,3,2);
$år = substr($dato,6,10);


$date =
$temp[2] = substr($dato,3,2);
$temp[0] = substr($dato,0,2);
$temp[1] = substr($dato,6,10);

for at holde sig til mine variabler i de funktioner jeg bruger.
Avatar billede Slettet bruger
18. oktober 2003 - 08:12 #4
Ved at ændre de to funktioner der konverterer datoen ser det nu ud til at virke. TAK for idén til en løsning. Nu har jeg kæmpet med det i flere dage og også søgt her på eksperten, og set mange muligheder, men jeg kunne ikke lige se idén i hvordan jeg fik det ind i mit system. TAK skal du have. Her er hvad jeg ændrede:

    function DB_date2mysql($date){
        $dag = substr($date,0,2);
        $maaned = substr($date,3,2);
        $aar = substr($date,6,10);
        $date = $aar . "-" . $maaned . "-" . $dag;
        return $date;
    }

       
    function DB_mysql2date($date){
        $dag = substr($date,8,2);
        $maaned = substr($date,5,2);
        $aar = substr($date,0,4);
        $date = $dag . "/" . $maaned . "/" . $aar;
        return $date;
    }
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 09:19 #5
Undskyld jeg var lige lidt væk, men det ser ud til at du fandt ud af det
Avatar billede Slettet bruger
18. oktober 2003 - 09:20 #6
Ja, det var en ren fornøjelse :-)
Avatar billede detox Nybegynder
18. oktober 2003 - 09:38 #7
function DB_mysql2date($date){
        $dag = substr($date,8,2);
        $maaned = substr($date,5,2);
        $aar = substr($date,0,4);
        $date = $dag . "/" . $maaned . "/" . $aar;
        return $date;
    }

Kan du roligt ændre til:

    function DB_mysql2date($date){
        return date('d/m/Y',strtotime($date));
    }

Men det vil være endnu lettere bare at hente dato fra MySQL i det ønskede format:

SELECT DATE_FORMAT(date_felt, '%d/%m/%Y') AS dato FROM tabel
Avatar billede Slettet bruger
18. oktober 2003 - 09:43 #8
Ja, tak for tipset, men nu tør jeg ikke pille mere. Nu virker det :-)

If it works, don't fix it - Er det ikke sådan man siger ;-)
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 09:45 #9
oz1cbk >> Det lyder da godt, god weekend!
Avatar billede Slettet bruger
18. oktober 2003 - 09:55 #10
Sårn for nysgerrigheden skyld. Kan man så også sådan her den anden vej ?

function DB_date2mysql($date){
return date('Y-m-d',strtotime($date));
    }

Det var jo rart at vide hvis men senere skal lave noget andet med dato.
Avatar billede Slettet bruger
18. oktober 2003 - 09:56 #11
Eller hedder det så timetostr($date) ?
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 10:09 #12
Det ved jeg faktisk ikke om man kan, men det er da bare at prøve
Avatar billede Slettet bruger
18. oktober 2003 - 10:11 #13
Ja ,em nu var det jo detox  der kom med idén til den forkortede varsion, og det ku' jo være han vidste om det også virkede omvendt. Det er farligt at pille :-)
Avatar billede detox Nybegynder
18. oktober 2003 - 10:20 #14
Nej, det virker ikke den anden vej. strtotime() kan klare mange datoformater, men ikke d/m/Y. Den vil tro det er m/d/Y, derfor går det ikke. Og selvfølgelig, som du siger, hvorfor reparere noget der virker. ;-)
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 10:26 #15
detox >> har du icq/msn ?
Avatar billede tipsen Nybegynder
18. oktober 2003 - 14:05 #16
Du kan også benytte dato-pakken fra PEAR - der har jeg har lavet en dansk oversættelse, så du kan få datoer udskrevet i forskellige danske formater med eks. navne på uger og måneder. Det ændrer dog stadig ikke på den måde datoen skal repræsenteres i MySQL - det er selvfølgelig med de datatyper som MySQL har indbygget.
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 14:08 #17
tipsen >> hvor finder man den, og hvordan anvendes den ?
Avatar billede tipsen Nybegynder
18. oktober 2003 - 21:14 #18
jacob: http://pear.php.net/package/I18N

Der følger eksempler med og det er meget nemt at anvende den - hvis ikke den danske oversættelse er med i nyeste version, kan du bare sende en mail - så skal jeg nok sende filen til dig!
Avatar billede jakobclausen Nybegynder
18. oktober 2003 - 21:18 #19
tipsen >> SYnes kun det er tgz filer jeg kan hente og dem kan jeg ikke pakke ud!
Avatar billede Slettet bruger
18. oktober 2003 - 21:44 #20
tipsen >> Er det ikke noget overkill at bruge den datopakke til de to små funktioner der drillede mig ? Jeg tror at det ville drille endnu mere, hvis jeg begyndte at rode mig ind i det ;-)

jakobclausen >> Hvis du kører windows, så besøg denne side:

http://www.ghisler.com/

Det program kan du bruge til at pakke dem ud, eller bare se i arkiverne ved at dobbeltklikke på dem.
Avatar billede tipsen Nybegynder
19. oktober 2003 - 09:31 #21
jakob: tgz = tar gzipped - kan udpakkes med winzip mener jeg.
oz1cbk: Jeg skal ikke kunne sige om pear er et hit for dig eller om det blot vil give dig nye problemer - jeg kan blot sige, at det fungerer fint for mig.
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 09:48 #22
tipsen >> undskyld, men jeg kan altså ikke rigtig lige se hvordan jeg bruger det.
Mappen er lagt op her:
www.bokaj.dk/php/eksperten/package.xml
www.bokaj.dk/php/eksperten/I18N-0.8.6/
Avatar billede Slettet bruger
19. oktober 2003 - 09:51 #23
Fnis :)

You don't have permission to access /php/eksperten/I18N-0.8.6/ on this server.
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 09:52 #24
oz1cbk >> Det er fordi du SKAL angive filnavnet, for den fil du vil se. jeg har ikke sat htaccess op
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 09:54 #25
oz1cbk >> Glad nu ? ;-)
Avatar billede Slettet bruger
19. oktober 2003 - 09:57 #26
Ja ja :-) Man er jo født nysgerrig, og jeg kan jo ikke vide hvilke filnavne jag kunne skrive. Jeg så kun på den dato som tipsen skrev, og det virkede noget stort for at lave det dato halløj som jeg havde problemer med.
Avatar billede tipsen Nybegynder
19. oktober 2003 - 11:00 #27
Udsnit fra hvordan jeg bruger det:

    //windows
    ini_set('include_path', '.;./include;./pear;./spaw;' . ini_get('include_path'));    //enable includes from PEAR library
    ini_set('error_reporting', E_ALL);

    require_once 'I18N/DateTime.php';                    // PEAR I18N class

    // Instans af DateTime til brug ved danske datoer og klokkeslæt
    $dateTime = new I18N_DateTime('da');
       
    // Generer "Sidst redigeret xxx" tekst udfra db-konfiguration
    $TI_Format = $dateTime->setFormat($config['lastmodifiedformat']);
    $config['lastmodified'] = sprintf($config['lastmodifiedtext'], $dateTime->format(filemtime('templates/'.$templatefile), $TI_Format));
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

IT-JOB