Avatar billede KFJ1972 Juniormester
22. februar 2012 - 21:19 Der er 19 kommentarer og
1 løsning

Dato/måned fra engelsk til dansk

Hejsa,

Jeg har noget kode hvor jeg vil oversætte månederne fra engelsk til dansk. Jeg har siddet og søgt og fundet ud af at jeg skal have lavet en array med månedernes danske navne. Men jeg kan desværre ikke finde ud af at gøre det så det virker.

Koden er:

    public function setTitle()
    {
        if(($this->month == NULL) || ($this->year == NULL))
        {
            $this->title = date("F Y");   
        }
        else
        {
            $this->title = date('F Y',mktime(0,0,0,$this->month,1,$this->year));
        }       
    }

Håber at en herinde kan hjælpe mig på rette vej.
Jeg takker på forhånd mange gange.
Avatar billede olebole Juniormester
22. februar 2012 - 21:37 #1
<ole>

Hvad sker? Hvad sker ikke? Hvad forventede du, der skulle ske?

/mvh
</bole>
Avatar billede olsensweb.dk Ekspert
22. februar 2012 - 22:29 #2
kan du ikke bare bruge setlocale ??
prøv at sette denne
setlocale(LC_ALL, 'da_DK');


læs dette spm http://www.eksperten.dk/spm/803550
Avatar billede olsensweb.dk Ekspert
22. februar 2012 - 22:46 #3
ellers er der jo altid nødløsningen lav en lille function
<?php
function GetMonthName($monthNumber) {
    $monthnames = array( 1 => 'Januar', 2 => 'Februar', 3 => 'Marts', 4 => 'April', 5 => 'Maj', 6 => 'Juni', 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'December');
    return $monthnames[$monthNumber];
}
echo GetMonthName(5); // udskriver Maj
?>
Avatar billede olsensweb.dk Ekspert
22. februar 2012 - 23:28 #4
ovenstående function bør vel se sådan ud
<?php
function GetMonthName($monthNumber) {
    $monthnames = array('Januar','Februar','Marts','April','Maj','Juni','July','August','September','Oktober','November','December');
    return $monthnames[$monthNumber-1];
}
echo GetMonthName(5);
?>

og evt teste for valide tal
Avatar billede showsource Seniormester
23. februar 2012 - 00:18 #5
Hvis du bruger mysql og et standard datoformat i tabel:

mysql_query("SET lc_time_names='da_DK'");

$dato = mysql_query("SELECT DATE_FORMAT(NOW(), '%W d. %d %M kl. %H %i')") or die (mysql_error());

echo mysql_result($dato,0);

NOW() skal jo så erstattes med navn på dit datofelt


http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 21:31 #6
kan du ikke bare bruge setlocale ??
prøv at sette denne
setlocale(LC_ALL, 'da_DK');


læs dette spm http://www.eksperten.dk/ (...)

-----------------------------------------------

Prøvede lige med:

          setlocale(LC_TIME, "da_DK");
          echo strftime ("%A %a %b %B %F");

Og det skrev ganske rigtigt februar på dansk, men F i koden står stadigvæk på engelsk.
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 21:36 #7
ovenstående function bør vel se sådan ud
<?php
function GetMonthName($monthNumber) {
    $monthnames = array('Januar','Februar','Marts','April','Maj','Juni','July','August','September','Oktober','November','December');
    return $monthnames[$monthNumber-1];
}
echo GetMonthName(5);
?>

og evt teste for valide tal

------------------------------------------------

Ja, jeg vil også mene at ovenstående er et skridt i den rigtige retning. Jeg kan bare ikke finde ud af at implementere i den kode fra indlæg 1. Jeg har desværre meget at lære endnu :-(
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 21:37 #8
<ole>

Hvad sker? Hvad sker ikke? Hvad forventede du, der skulle ske?

/mvh
</bole>

----------------------

Der sker det at date("F Y") udskriver February 2012 i stedet for Februar 2012 som jeg ønsker.
Avatar billede olebole Juniormester
23. februar 2012 - 22:12 #9
Prøv noget i stil med:

    function toDanishMonth($strDate) {
        $months = array(
            'January' => 'Januar',
            'February' => 'Februar',
            'March' => 'Marts',
            'May' => 'Maj',
            'June' => 'Juni',
            'July' => 'Juli',
            'October' => 'Oktober'
        );
        return strtr($strDate, $months);
    }

    public function setTitle()
    {
        if(($this->month == NULL) || ($this->year == NULL))
        {
            $this->title = date("F Y");   
        }
        else
        {
            $this->title = date('F Y',mktime(0,0,0,$this->month,1,$this->year));
        }
        $this->title = toDanishMonth($this->title);
    }
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 22:33 #10
Jeg får følgende fejl:
Fatal error: Call to undefined function toDanishMonth()

i linjen med:
$this->title = toDanishMonth($this->title);
Avatar billede olsensweb.dk Ekspert
23. februar 2012 - 22:37 #11
nåå læste lige Eriks kommentar http://www.eksperten.dk/spm/803550 #25 pkt 2
et alternativ til olebole's code som jeg ikke har teste ennu
kan du prøve dette
<?php
class HeaderClass{
    public $month; // bør være private kun public afh test
    public $year; // bør være private kun public afh test
    public $title;
   
    function __construct(){               
    }
    function __destruct() {
      }

    private function GetMonthName($monthNumber) {
        $monthnames = array('Januar','Februar','Marts','April','Maj','Juni','July','August','September','Oktober','November','December');
        return $monthnames[$monthNumber-1];
    }
   
    public function setTitle()  {
        if(($this->month == NULL) || ($this->year == NULL)) {
            list ($this->month, $this->year)=explode(" ", date("m Y") ); // retunerer 02 2012
            $monthname = $this->GetMonthName($this->month);           
            $this->title = $monthname." ".$this->year; 
        }
        else{
            $this->title = date('m d Y',mktime(0,0,0,$this->month,1,$this->year));
        }     
    }
}

// test
$h=new HeaderClass();
$h->setTitle();
echo $h->title;
echo "<br/>";
echo $h->month;
echo "<br/>";
echo $h->year;
?>
Avatar billede olsensweb.dk Ekspert
23. februar 2012 - 22:42 #12
#10
hvis toDanishMonth ligger inde i din class skal du have en $this foran, for at fortælle det er inde i dette obj
lige nu angiver du den som en fri function og der ligger den ikke
prøv at lave det om til dette $this->title = $this->toDanishMonth($this->title);
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 22:50 #13
Yes, det gjorde udslaget :-)
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 22:57 #14
Ja, var lidt hurtig før.
Sprang op af stolen af glæde :-)

Ja, det virker faktisk. Og det er superfedt at kunne få jeres hjælp til at komme videre. Jeg takker rigtig mange gange.

Synes selv at jeg forstår hvad problemet er og hvad der skal gøres for at løse det. Jeg er bare ikke i stand til løse det selv. Og så er det jo super at I er så hjælpsomme :-)

I skal vide at sådan en hjælp er højt værdsat herfra. Stort tak.

Jeg vil gerne give points til både ronols og olebole da jeg syntes at I begge har hjulpet mig videre. Kan I ikke lige skrive tilbage så jeg kan give jer point.
Avatar billede olebole Juniormester
23. februar 2012 - 23:00 #15
Til min personlige kodestil ville det passe bedre at lægge funktionen sammen med andre globalt anvendelige funktioner i en funcs.php, som inkluderes i toppen af dokumentet.

I så fald tilhører funktionen ikke klassen - og skal derfor ikke kaldes med $this->. Men det er en smagssag  =)
Avatar billede olebole Juniormester
23. februar 2012 - 23:02 #16
Ellers tak, jeg samler ikke point. De må være ronols  =)
Avatar billede olsensweb.dk Ekspert
23. februar 2012 - 23:22 #17
du får så en svar her med OleBole's fri'e function, der helt klar er kandidat til at ligge i en extern fil der includeres
du har jo selv løsningen hvis functionen ligger inde i classen

<?php
// Tju hej hvor det går "jeg er en fri function"
function toDanishMonth($strDate) {
    $months = array('January' => 'Januar','February' => 'Februar','March' => 'Marts','May' => 'Maj','June' => 'Juni','July' => 'Juli','October' => 'Oktober');
    return strtr($strDate, $months);
}

class OleBole{
    private $month;
    private $year;
    public $title;
   
    function __construct(){   
    }
    function __destruct() {
      }
   
    public function setTitle() {
        if(($this->month == NULL) || ($this->year == NULL)){
            $this->title = date("F Y"); 
        }
        else{
            $this->title = date('F Y',mktime(0,0,0,$this->month,1,$this->year));
        }
        $this->title = toDanishMonth($this->title);
    }
}

$O=new OleBole();
$O->setTitle();
echo $O->title;
?>
Avatar billede olebole Juniormester
23. februar 2012 - 23:29 #18
*LoL* ... $O=new OleBole();. Pas nu på, hvad du beder om, ronols. Mange vil sikker finde, at én er mere end rigelig!  *D
Avatar billede KFJ1972 Juniormester
23. februar 2012 - 23:36 #19
Point eller ej, jeg takker jer begge for den uundværlige hjælp I kom med :-)
Avatar billede olebole Juniormester
23. februar 2012 - 23:40 #20
Selvtak  =)
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

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