Avatar billede datasource Nybegynder
10. oktober 2006 - 16:35 Der er 15 kommentarer og
3 løsninger

Skriv alle måneder på en side

Hej eksperter.

Jeg skal have lavet en side hvor alle årstal og måneder siden September 2005 indtil nu står.
altså så det ser sådan ud:

2005
September
Oktober
November
December

2006
Januar
Februar
Marts
April
Maj
Juni
Juli
August
September

Hver måned skal så være et link. Som ser sådan ud
hvor md er månedens nummer og aa er årstallet:
nyhed.php?md=05&aa=2006
Avatar billede nielle Nybegynder
10. oktober 2006 - 16:47 #1
Noget i denne stil?

$maanedNavn = ("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

$startAar = 2005;
$startMaaned = 8;

$slutAar = idate("Y");
$slutMaaned = idate("m");

for ($aar=$startAar; $aar<=$slutAar$aar++)
{
    echo $aar . "<br>";
    for ($maaned=0; $maaned<=11; $maaned++)
    {
        if ($aar == $startAar && $maaned < $startMaaned) continue;
        if ($aar == $slutAar && $slutMaaned < $maaned) continue;

        echo "<a href='nyhed.php?md=$maaned&aa=$aar'>" . $maanedNavn[$maaned] . "</a><br>";
    }
    echo "<br>";
}
Avatar billede datasource Nybegynder
10. oktober 2006 - 16:51 #2
Den får denne fejl:
Parse error: syntax error, unexpected ',' in /var/www/www.dnsb.info/arkiv.php on line 10
"$maanedNavn = ("Januar..." er linje 10
Avatar billede nielle Nybegynder
10. oktober 2006 - 16:53 #3
$maanedNavn = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");
Avatar billede coderdk Praktikant
10. oktober 2006 - 16:54 #4
Prøv denne:

<?php

    setlocale( LC_TIME, "da_DK", "da", "dan", "danish", "da_DK.ISO8859-1" );
   
    $date = $start = mktime( 0, 0, 0, 9, 1, 2005 );
    $now = time();
   
    $oy = 0;
    while ( true )
    {
        $y = date( "Y", $date );
        if ( $oy != $y )
        {
            if ( $oy != 0 ) echo "<br>";
            echo "<b>" . date( "Y", $date ) . "</b><br>\n";
            $oy = $y;
        }
        echo strftime( "<a href=\"nyhed.php?md=%m&amp;aa=%Y\">%B</a><br>\n", $date );
        $date = strtotime( "+1 month", $date );
        if ( $date > $now ) break;
    }

?>

:)
Avatar billede hmm10 Nybegynder
10. oktober 2006 - 17:47 #5
Testside: http://chapter.dk/exp/737793.php

$maaned_1 = 9;  //  Givet start-måned
$maaned_2 = date("n", time());  //  Udregnet slut-måned
$aar_1 = 2005;  //  Givet start-år
$aar_2 = date("Y", time());  //  udreghet slut-år

for($i = ($aar_2-$aar_1); $i >= 0; $i--)
  for($j = 12; $j != 0; $j--)
    if(($aar_1+$i == $aar_2 && $maaned_2 >= $j) || ($aar_1+$i != $aar_2 && $aar_1+$i != $aar_1) || ($aar_1+$i == $aar_1 && $maaned_1 <= $j))
    {
      $time = mktime(0,0,0,$j,1,$aar_1+$i);
      print "<a href=\"index.php?md=".date("m", $time)."&aa=".date("y", $time)."\">".date("Y / m",$time)."</a><br />\n";
    }
Avatar billede datasource Nybegynder
10. oktober 2006 - 17:51 #6
Okay tak coderdk. dit virkede helt perfekt..Lige 2 ting til. Hvordan får jeg månederne med stort og så skal det stå omvendt sådan så 2006 øverst og 2005 under osv.
Avatar billede hmm10 Nybegynder
10. oktober 2006 - 17:53 #7
Og hvis du vil have månedsnavnet med:

$maaned = array('01' => "Januar",'02' => "Februar",'03' => "Marts",'04' => "April",'05' => "Maj",'06' => "Juni",'07' => "Juli",'08' => "August",'09' => "September",'10' => "Oktober",'11' => "November",'12' => "December");
$maaned_1 = 9;  //  Givet start-måned
$maaned_2 = date("n", time());  //  Udregnet slut-måned
$aar_1 = 2005;  //  Givet start-år
$aar_2 = date("Y", time());  //  udreghet slut-år

for($i = ($aar_2-$aar_1); $i >= 0; $i--)
{
    print $aar_1+$i."<br />\n";
    for($j = 12; $j != 0; $j--)
        if(($aar_1+$i == $aar_2 && $maaned_2 >= $j) || ($aar_1+$i != $aar_2 && $aar_1+$i != $aar_1) || ($aar_1+$i == $aar_1 && $maaned_1 <= $j))
        {
            $time = mktime(0,0,0,$j,1,$aar_1+$i);
            print "<a href=\"index.php?md=".date("m", $time)."&aa=".date("y", $time)."\">".$maaned[date("m",$time)]."</a><br />\n";
        }
}
Avatar billede nielle Nybegynder
10. oktober 2006 - 17:57 #8
F.eks. sådan:

$maanedNavn = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

$startAar = 2005;
$startMaaned = 8;

$slutAar = idate("Y");
$slutMaaned = idate("m");

for ($aar=$slutAar; $aar>=$startAar; $aar--)
{
    echo $aar . "<br>";
    for ($maaned=0; $maaned<=11; $maaned++)
    {
        if ($aar == $startAar && $maaned < $startMaaned) continue;
        if ($aar == $slutAar && $slutMaaned < $maaned) continue;

        echo "<a href='nyhed.php?md=$maaned&aa=$aar'>" . $maanedNavn[$maaned] . "</a><br>";
    }
    echo "<br>";
}
Avatar billede datasource Nybegynder
10. oktober 2006 - 18:14 #9
Okay. Nu har jeg valgt at bruge hmmm10's kode:
$maaned = array('01' => "Januar",'02' => "Februar",'03' => "Marts",'04' => "April",'05' => "Maj",'06' => "Juni",'07' => "Juli",'08' => "August",'09' => "September",'10' => "Oktober",'11' => "November",'12' => "December");
$maaned_1 = 9;  //  Givet start-måned
$maaned_2 = date("n", time());  //  Udregnet slut-måned
$aar_1 = 2005;  //  Givet start-år
$aar_2 = date("Y", time());  //  udreghet slut-år

for($i = ($aar_2-$aar_1); $i >= 0; $i--)
{
    print $aar_1+$i."<br />\n";
    for($j = 12; $j != 0; $j--)
        if(($aar_1+$i == $aar_2 && $maaned_2 >= $j) || ($aar_1+$i != $aar_2 && $aar_1+$i != $aar_1) || ($aar_1+$i == $aar_1 && $maaned_1 <= $j))
        {
            $time = mktime(0,0,0,$j,1,$aar_1+$i);
            print "<a href=\"index.php?md=".date("m", $time)."&aa=".date("y", $time)."\">".$maaned[date("m",$time)]."</a><br />\n";
        }
}

men en lille detalje er at årstallet ikke skal være 06 men 2006..hvordan klarer man den ?
Avatar billede datasource Nybegynder
10. oktober 2006 - 18:16 #10
Okay..skulle være Y i stedet for y..nå man i alle har svaret fint så i kan bare ligge svar og få points :)
Avatar billede hmm10 Nybegynder
10. oktober 2006 - 18:23 #11
Smider et svar hvis det kan bruges.

Har testet alle forslagende -- og har måtte konstatere at mit ikke er et hurtigste :(
idate() virker ikke på min server?
Avatar billede nielle Nybegynder
10. oktober 2006 - 18:27 #12
Hvis idate ikke virker er det fordi at du bruger en lidt gammel PHP. idate er med fra PHP v5:

http://dk2.php.net/idate
Avatar billede hmm10 Nybegynder
10. oktober 2006 - 18:31 #13
nielle > Så må jeg jo vente på mit hotel opdatere til PHP5..
Avatar billede nielle Nybegynder
10. oktober 2006 - 18:34 #14
Ja, eller du kan bruge date() og så konvertere til en int. idate() er bare lidt mere to-the-point efter min mening :^)
Avatar billede coderdk Praktikant
10. oktober 2006 - 18:41 #15
Du får også lige min:

<?php

    setlocale( LC_TIME, "da_DK", "da", "dan", "danish", "da_DK.ISO8859-1" );
 
    $end = mktime( 0, 0, 0, 9, 1, 2005 );
    $date = $now = time();
 
    $oy = 0;
    while ( true )
    {
        $y = date( "Y", $date );
        if ( $oy != $y )
        {
            if ( $oy != 0 ) echo "<br>";
            echo "<b>" . date( "Y", $date ) . "</b><br>\n";
            $oy = $y;
        }
        echo strftime( "<a href=\"nyhed.php?md=%m&amp;aa=%Y\">", $date )
            . ucfirst( strftime( "%B", $date ) ) . "</a><br>\n";
        $date = strtotime( "-1 month", $date );
        if ( $date < $end ) break;
    }

?>
Avatar billede nielle Nybegynder
10. oktober 2006 - 20:21 #16
Er det mig der ventes på? Jeg har jo ikke fået at vide om min kode virker for dig datasource? Den kræver som sagt at man har PHP 5.
Avatar billede datasource Nybegynder
10. oktober 2006 - 22:42 #17
Kunne bruge alle jeres svar..da jeg lærte noget forskelligt af dem :)
Avatar billede nielle Nybegynder
11. oktober 2006 - 06:53 #18
Takker for point :^)
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