Avatar billede tras Juniormester
18. oktober 2006 - 10:46 Der er 29 kommentarer og
1 løsning

Calendar gider ikke vise dato navn mandag, tirsdag osv

Ok jeg har et problem med min calendar.

Jeg vil gerne hiligte nogle dage samt makere dagen idag.
men vil også gerne havde dagene til at stå som de danske. men jeg kan ikke få den til at lave bægge uden den går i smadre.

Her er koden med mareringen som jeg gerne vil havde

<?php
                    $time = time();
                    $today = date('j',$time);
                    $days = array(
                    2=>array('#','linked-day'),
                    $today=>array(NULL,NULL,'<span style="color: red; font-weight: bold; font-size: larger; text-decoration: blink;">'.$today.'</span>'));
                    echo generate_calendar(date('Y', $time), date('n', $time), $days);
                ?>

og her er koden hvor jeg har prøvet at sætte den ind i. Nu viser den Mandag tirsdag onsdag osv. men ikke de makerede dage.

<?php
                        $time = time();
                        $today = date('j',$time);
                        $days = array(
                        2=>array('#','linked-day'),
                        $today=>array(NULL,NULL,'<span style="color: red; font-weight: bold; font-size: larger; text-decoration: blink;">'.$today.'</span>'));
                        $oldlocale = setlocale(LC_TIME, NULL); #save current locale
                        setlocale(LC_TIME, 'es_ES'); #Spanish
                        echo generate_calendar(date('Y', $time), date('n', $time), NULL, 3, NULL, 1);
                        setlocale(LC_TIME, $oldlocale);
                ?>

Hvis jeg skriver date('n', $time), $days, NULL, 3, NULL, 1);
fjerner den alle dagene mandag tirsdag osv. hvad laver jeg forkert! håber i kan forstå hvad jeg prøver at sige
Avatar billede tras Juniormester
18. oktober 2006 - 10:52 #1
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 10:55 #2
det kan være problemer med funktionen generate_calendar. har du koden til den, så vi kan se efter?
Det kan også være fordi den ikke kan bruge $days som et array, som du prøver at gøre.
Avatar billede tras Juniormester
18. oktober 2006 - 11:03 #3
Funk til den skulle være ok. Jeg kan godt lave de 2 ting vær for sig men sammen :S

<?
function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
                        $first_of_month = gmmktime(0,0,0,$month,1,$year);
                        #remember that mktime will automatically correct if invalid dates are entered
                        # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
                        # this provides a built in "rounding" feature to generate_calendar()
                   
                        $day_names = array(); #generate all the day names according to the current locale
                        for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
                            $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
                   
                        list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
                        $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
                        $title  = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names
                   
                        #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
                        @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
                        if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
                        if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
                        $calendar = '<table class="calendar">'."\n".
                            '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";
                   
                        if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
                            #if day_name_length is >3, the full name of the day will be printed
                            foreach($day_names as $d)
                                $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
                            $calendar .= "</tr>\n<tr>";
                        }
                   
                        if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
                        for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
                            if($weekday == 7){
                                $weekday  = 0; #start a new week
                                $calendar .= "</tr>\n<tr>";
                            }
                            if(isset($days[$day]) and is_array($days[$day])){
                                @list($link, $classes, $content) = $days[$day];
                                if(is_null($content))  $content  = $day;
                                $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                                    ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
                            }
                            else $calendar .= "<td>$day</td>";
                        }
                        if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days
                   
                        return $calendar."</tr>\n</table>\n";
                    }
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 11:17 #4
hvordan ser det ud med den her:
echo generate_calendar(date('Y', $time), date('n', $time), $days);
Avatar billede tras Juniormester
18. oktober 2006 - 11:22 #5
Fint men så er det ikke danke dage mere. så er det søndag mandag osv. og ikke mandag tirsdag osv.
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 11:29 #6
hmm prøv at ændre den her:
function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
til det her:
function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 1, $pn = array()){

>læg mærke til at $first_day er ændret<
Avatar billede tras Juniormester
18. oktober 2006 - 11:36 #7
:D hehe det er jo bare som det skal være. Tak, Du ved telfældigvis ikke hvordan man får der til at stå Ma Ti On To Fr Lø Sø?!
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 11:51 #8
hmm prøv med:
function generate_calendar($year, $month, $days = array(), $day_name_length = 2, $month_href = NULL, $first_day = 1, $pn = array()){
i stedet for:
function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){

>læg mærke til at $day_name_length og $first_day er ændret<
Avatar billede tras Juniormester
18. oktober 2006 - 12:12 #9
yep men nu tænkte jeg mere på at formatere det til dansk?! vis det er muligt :D
Avatar billede tras Juniormester
18. oktober 2006 - 12:56 #10
Det er ok vis du ikke kan hjælpe på dette pungt, du har fortjænt de points jeg har tildet emnet :D
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 13:51 #11
det burde den gøre automatisk, men prøv at sætte setlocale(LC_TIME, 'danish'); ind først i funktionen
Avatar billede tras Juniormester
18. oktober 2006 - 14:22 #12
Nej det hjælp desvære ikke
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 14:26 #13
Kan du ikke prøve at ligge det her ind i en php-fil og komme med et link til den så jeg kan se hvilke "locales" der er installeret
<?php
function list_system_locales(){
  ob_start();
  system('locale -a');
  $str = ob_get_contents();
  ob_end_clean();
  return split("\\n", trim($str));
}

$locales = list_system_locales();
echo "<pre>"; print_r($locales); echo "</pre>";
?>
Avatar billede tras Juniormester
18. oktober 2006 - 14:35 #14
Avatar billede tras Juniormester
18. oktober 2006 - 14:36 #15
Array
(
    [0] =>
)
Avatar billede tras Juniormester
18. oktober 2006 - 14:39 #16
:D
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 14:48 #17
hvor har du placeret setlocale(LC_TIME, 'danish');?
Avatar billede tras Juniormester
18. oktober 2006 - 14:59 #18
<?php
                                $time = time();
                                $today = date('j',$time);
                                $days = array(2=>array('#','linked-day'),
                                $today=>array(NULL,NULL,'<span style="color: red; font-weight: bold; font-size: larger; text-decoration: blink;">'.$today.'</span>'));
                                $oldlocale = setlocale(LC_TIME, NULL); #save current locale
                                setlocale(LC_TIME, 'danish'); #Dansk
                                echo generate_calendar(date('Y', $time), date('n', $time), $days);
                                setlocale(LC_TIME, $oldlocale);
                            ?>
Avatar billede tras Juniormester
18. oktober 2006 - 15:00 #19
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 15:12 #20
så kan det godt være derfor.
prøv at sætte den ind i toppen af filen i stedet for.
Eller evt lige efter function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
Avatar billede tras Juniormester
18. oktober 2006 - 15:14 #21
det samme den endre ikke på noget af det
Avatar billede sw_red_6 Nybegynder
18. oktober 2006 - 15:28 #22
kan du ikke komme med koden igen? det hele så jeg kan se hvordan tingene er placeret i forhold til hinanden
Avatar billede tras Juniormester
18. oktober 2006 - 17:44 #23
Jo.

<?php
                                setlocale(LC_TIME, 'danish'); #Dansk
                                $time = time();
                                $today = date('j',$time);
                                $days = array(2=>array('#','linked-day'),
                                $today=>array(NULL,NULL,'<span style="color: red; font-weight: bold; font-size: larger; text-decoration: blink;">'.$today.'</span>'));
                                echo generate_calendar(date('Y', $time), date('n', $time), $days);
                            ?>





<?
function generate_calendar($year, $month, $days = array(), $day_name_length = 2, $month_href = NULL, $first_day = 1, $pn = array()){


                        $first_of_month = gmmktime(0,0,0,$month,1,$year);
                        #remember that mktime will automatically correct if invalid dates are entered
                        # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
                        # this provides a built in "rounding" feature to generate_calendar()
                   
                        $day_names = array(); #generate all the day names according to the current locale
                        for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
                            $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
                   
                        list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
                        $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
                        $title  = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names
                   
                        #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
                        @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
                        if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
                        if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
                        $calendar = '<table class="calendar">'."\n".
                            '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";
                   
                        if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
                            #if day_name_length is >3, the full name of the day will be printed
                            foreach($day_names as $d)
                                $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
                            $calendar .= "</tr>\n<tr>";
                        }
                   
                        if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
                        for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
                            if($weekday == 7){
                                $weekday  = 0; #start a new week
                                $calendar .= "</tr>\n<tr>";
                            }
                            if(isset($days[$day]) and is_array($days[$day])){
                                @list($link, $classes, $content) = $days[$day];
                                if(is_null($content))  $content  = $day;
                                $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                                    ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
                            }
                            else $calendar .= "<td>$day</td>";
                        }
                        if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days
                   
                        return $calendar."</tr>\n</table>\n";
                    }
Avatar billede sw_red_6 Nybegynder
19. oktober 2006 - 09:55 #24
du kan prøve at ændre den her linie:
setlocale(LC_TIME, 'danish'); #Dansk
til det her:
setlocale(LC_ALL, 'da_DA'); #Dansk
og hvis det ikke virker så prøv med:
setlocale(LC_ALL, 'danish'); #Dansk

hvis det ikke virker så ved jeg ikke lige hvad der skal gøres. Havde du danske dage før?
Avatar billede tras Juniormester
19. oktober 2006 - 10:42 #25
:/ virker ikke, tak for hjælpen jeg prøver at finde en måde at få det til at virke på.
Avatar billede sw_red_6 Nybegynder
19. oktober 2006 - 11:11 #26
hmm du kan gøre 1 af 3 ting.
1. du kan kontakte dit webhotel og høre om det kunne være muligt at få installeret nogle locales
2. du kan ændre koden så der hvor den skriver dag-navne i det array, laves den om så der står danske navne i stedet for den dynamiske opbygning der er nu (kan godt give yderligere problemer, har ikke lige tjekket koden mht. det)
3. du kan beslutte at det virker godt nok med engelske navne.

Og så lige et svar så du kan få lukket her
Avatar billede coderdk Praktikant
19. oktober 2006 - 19:01 #27
Prøv at ændre din setlocale til:

setlocale(LC_ALL, 'da', 'da_DK', 'dan', 'danish', 'da_DK.ISO8859-1' );
Avatar billede coderdk Praktikant
19. oktober 2006 - 19:01 #28
LC_ALL er ikke nødvendigt, LC_TIME burde være nok...
Avatar billede sw_red_6 Nybegynder
31. oktober 2006 - 10:30 #29
har du fundet ud af det?
Avatar billede tras Juniormester
13. november 2006 - 12:27 #30
Nope :(
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