Avatar billede NielsErikP Mester
02. april 2013 - 22:52 Der er 21 kommentarer og
1 løsning

Udelader 2 måneder i udskrift.

Hej..

Er der nogen der kan se, hvor problemet ligger i forhold til at hvis jeg kalder Funktionen "Ugedage" med samtlige måneder... Giver den dato, månede, år.. undtagen hvis jeg kalder med "august" og "september".. så giver den kun dato, år:



function Ugedage($dayname, $month , $year) {
                    $day = array();
                    $day[] = strtotime("first $dayname of $month $year");
                    $day[] = strtotime("second $dayname of $month $year");
                    $day[] = strtotime("third $dayname of $month $year");
                    $day[] = strtotime("fourth $dayname of $month $year");
                    if(date('F',strtotime("fifth $dayname of $month $year")) == date('F', strtotime("fourth $dayname of $month $year"))) {
                        $day[] = strtotime("fifth $dayname of $month $year");
                    };
                    return $day;
                   
                };
                $udskriv =    Ugedage('wednesday', 'sep' ,2013);
               
                foreach($udskriv as $enDag) {
                    $dag= explode("-", date("j-m-Y", $enDag));
                    $månede = "";
           
                    switch($dag[1]) {
                        case 01:
                            $månede = "januar";
                            break;
                        case 02:
                            $månede = "februar";
                            break;   
                        case 03:
                            $månede = "marts";
                            break;   
                        case 04:
                            $månede = "april";
                            break;   
                        case 05:
                            $månede = "maj";
                            break;   
                        case 06:
                            $månede = "juni";
                            break;   
                        case 07:
                            $månede = "july";
                            break;   
                        case 08:
                            $månede = "august";
                            break;   
                        case 09:
                            $månede = "september";
                            break;   
                        case 10:
                            $månede = "oktober";
                            break;
                        case 11:
                            $månede = "november";
                            break;
                        case 12:
                            $månede = "december";
                            break;
                        default:
                            break;
                    }
           
                    $dato =  $dag[0] . " " .$månede ." " . $dag[2];
                                               
                    echo "<div class=\"ramme\">" .
                            "<div class=\"dato\">" . $dato ."</div>".
                            "<div class=\"akt\">" ."</div>".
                        "</div>";
                };
            ?>           

Avatar billede erikjacobsen Ekspert
02. april 2013 - 23:17 #1
Ikke
                        case 08:
                            $månede = "august";
                            break; 
                        case 09:
                            $månede = "september";
                            break;   
men
                        case 8:
                            $månede = "august";
                            break; 
                        case 9:
                            $månede = "september";
                            break;
Avatar billede olebole Juniormester
02. april 2013 - 23:23 #2
<ole>

@Erik: Jeg skal ikke afvise, det virker, men må være mere korrekt at skrive:

        case '08':
            $månede = "august";
            break;   
        case '09':
            $månede = "september";
            break;

/mvh
</bole>
Avatar billede olebole Juniormester
02. april 2013 - 23:25 #3
@NielsErikP: Hvis du skriver:

foreach($udskriv as $enDag) {
    $dag= explode("-", date("j-m-Y", $enDag));
    $månede = "";
    var_dump($dag);
        // ... osv ...

- vil du se, array'ets elementer er strenge
Avatar billede erikjacobsen Ekspert
02. april 2013 - 23:29 #4
Ja ja, Ole - det virker da som jeg skriver, og det er altså lidt sjovere når man går den vej ... jeg elsker den forklaring som spørgeren om om lidt.... ;)
Avatar billede olebole Juniormester
02. april 2013 - 23:30 #5
#1: Testet - og det virker faktisk  =)
Avatar billede NielsErikP Mester
02. april 2013 - 23:48 #6
Hej...

Jow.. men "m" i date --> "Nummeric representation of month with leading zeros"


#!: Erik, hvorfor ikke lige ved 8. og 9. månede men godt ved 3. og 4... hmmm
Avatar billede NielsErikP Mester
02. april 2013 - 23:55 #7
Hej igen...

Smed var_dump på og fik syn for sagen.. at det var strenge!!
Så jeg smed "Gåseøjne" på.
Tak for hjælpen, ole...
Også til dig, erik for indspark.
Avatar billede erikjacobsen Ekspert
03. april 2013 - 00:05 #8
Jamen, du slipper ikke for forklaringen. Ser du, i PHP-kode, når man skriver et tal, der begynder med et 0, så forventes det at man angiver tallet i det oktale talsystem. Så 07 er et syvtal, men 010 er faktisk 8. Men der er ikke noget, der hedder 08 og 09 i det oktale talsystem, som jo kun har cifre fra 0 til 7. 08 og 09 bliver så begge til 0. Og så rammer du ved siden af.

Men i en streng i PHP, der gælder den regel ikke. Så vi har

    "08"==8    Ja
    "08"==08    Nej
    "8"==08    Nej
    "8"==010    Ja
    "0"==08    Ja
    "OleBole"=="Nobelprismodtager"  Nej

Men Ole har da ret i at strenge skal sammenlignes som strenge.
Avatar billede NielsErikP Mester
03. april 2013 - 00:13 #9
Hej...

Du er fyldt med pis, erik "smiler".. men du ved squ noget ;-)
Tak for forklaringen.
Avatar billede olebole Juniormester
03. april 2013 - 00:17 #10
- og jeg må nok indse, at jeg må nøjes med 'Udsalgsprisen'  :o|

@NielsErikP: Efter Påske er det ganske almindeligt, at der står lidt ekstra tis i overløbsrørene  *o)
Avatar billede arne_v Ekspert
03. april 2013 - 00:21 #11
Hvad med den her loesning:

<?php
function Weekdays($dayname, $month , $year) {
    $day = array();
    $day[] = strtotime("first $dayname of $month $year");
    $day[] = strtotime("second $dayname of $month $year");
    $day[] = strtotime("third $dayname of $month $year");
    $day[] = strtotime("fourth $dayname of $month $year");
    if(date('F',strtotime("fifth $dayname of $month $year")) == date('F', strtotime("fourth $dayname of $month $year"))) {
        $day[] = strtotime("fifth $dayname of $month $year");
    };
    return $day;
};

$allwd = Weekdays('wednesday', 'sep' , 2013);
setlocale(LC_TIME, 'danish_Denmark');
foreach($allwd as $onewd) {
    $dstr = strftime('%#d %B %Y', $onewd);
    echo '<div class="ramme"><div class="dato">' . $dstr . '</div><div class="akt"></div></div>' . "\r\n";
};
?>
Avatar billede olebole Juniormester
03. april 2013 - 00:25 #12
@Arne: Det var betænksomt af dig, at vente med at entrere tråden med den løkke, til efter jeg definitivt havde mistet min Nobelpris  *D
Avatar billede NielsErikP Mester
03. april 2013 - 00:38 #13
Hej...

@olebole: Ja.. de frokoster ;-)

@arne: ja..udgaven med Switch og explode er nok for php folk på de "billige" rækker...
Jeg suger til mig... smider du så et svar??
Avatar billede arne_v Ekspert
03. april 2013 - 02:38 #14
svar
Avatar billede NielsErikP Mester
03. april 2013 - 22:20 #15
Hej...

Tak for hjælp, forklaring og jokes til jer alle :-)
Avatar billede NielsErikP Mester
04. april 2013 - 22:58 #16
Hej..

Hvor får man så lige information om følgende "Formater" henne :

    setlocale(LC_TIME, 'danish_Denmark ' );
Avatar billede erikjacobsen Ekspert
04. april 2013 - 23:06 #17
For nyere PHP-versioner er der  http://php.net/intl  som vil være værd at overveje (jeg har ikke prøvet).

Dertil kommer at setlocale har sine problemer. http://www.onphp5.com/article/22

Du kan altid bruge din oprindelige løsning, evt smukkeseret lidt ved at putte månedsnavnene i et array, så du sparer en lang switch-sætning.
Avatar billede erikjacobsen Ekspert
04. april 2013 - 23:15 #18
...og glemte: man skal yderligere være opmærksom på at løsningen fra #11 skriver måneds navne med stort (så vidt jeg teste det). Det gør man ikke på danske, med mindre naturligvis at månedsnavnet er i begyndelsen af en sætning. Så skal man måske have fat i http://php.net/strtolower
Avatar billede NielsErikP Mester
04. april 2013 - 23:26 #19
Hej...

Jamen jeg syntes nemli' også der stod mht. de forskellige platforme, servere osv.. på phpnet's setlocale side.

Så det du siger at selvom man er ny i faget, var min kode ok??
Men hvem oppionerer mod en mand med erfaring over over en mill på konto'en.
Avatar billede erikjacobsen Ekspert
04. april 2013 - 23:34 #20
Jeg ved ikke alt - men for år tilbage opgav jeg selv setlocale :)
Avatar billede NielsErikP Mester
04. april 2013 - 23:40 #21
Hej..


Aaaaaaargh... næsten ;-)

Men tak, prøver lige dit forslag.
Avatar billede NielsErikP Mester
06. april 2013 - 23:00 #22
Hej..

For interesserede, endte jeg op med at have følgende kode :




<?php
               
                $month_danish_array = array ('januar','februar','marts','april','maj','juni','july','august','september','oktober','november','december');
                $month_engl_array = array ('jan','feb','mar','apr','may','jun','jul','aug','sep','okt','nov','dec');
                $day_month = getdate();
                $month = $day_month["mon"];
                $monthname= $month_engl_array[$month -1];
               
                echo "<div class=\"ramme\">" .
                    "<div id=\"skrift1\">" ."" . "</div>" .
                    "<div id=\"skrift2\">" . $month_danish_array[$month-1] . "</div>" .
                    "</div>";
               
                function WeekDays($dayname, $monthname , $year) {
                    $day = array();
                    $day[] = strtotime("first $dayname of $monthname $year");
                    $day[] = strtotime("second $dayname of $monthname $year");
                    $day[] = strtotime("third $dayname of $monthname $year");
                    $day[] = strtotime("fourth $dayname of $monthname $year");
                    if(date('F',strtotime("fifth $dayname of $monthname $year")) == date('F', strtotime("fourth $dayname of $monthname $year"))) {
                        $day[] = strtotime("fifth $dayname of $monthname $year");
                    };
                    return $day;
                   
                };
                $alldays =     WeekDays('wednesday', $monthname ,2013);
                           
                foreach($alldays as $oneday) {
                    $mth = explode('-', date('d-m-Y', $oneday));
                    $mth_array = array ( '01' => 1, '02' => 2, '03' => 3, '04' => 4, '05' => 5, '06' => 6, '07' => 7, '08' => 8, '09' => 9, '10' => 10, '11' => 11, '12' => 12, '13' => 13,
                                        '14' => 14, '15' => 15, '16' => 16, '17' => 17, '18' => 18, '19' => 19, '20' => 20, '21' => 21, '22' => 22, '23' => 23, '24' => 24, '25' => 25,
                                        '26' => 26, '27' => 27, '28' => 28, '29' => 29, '30' => 30, '31' => 31);
                    $dateString = $mth_array[$mth[0]] .' ' .$month_danish_array[$mth_array[$mth[1] ]-1] .' ' .$mth[2];
                    echo '<div class="ramme"><div class="dato">' . $dateString . '</div><div class="akt"></div></div>';
                }
               

            ?>


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