Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

Maanden in een lus; hoe krijg ik de 'maanden' zelf ipv nrs.

Anoniem
None
15 antwoorden
  • [code:1:3e1e832d8c]
    $huidig_maand_getal_enkel = date(n); //maand in getallen zonder 0 (1 - 12)
    $huidig_maand_getal = date(m); //maand in getallen (01 - 12)
    $huidig_maand_tekst = date(F); //maand in tekst
    $huidig_maand_getal_enkel_beneden = $huidig_maand_getal_enkel - 1;


    <?php
    for($c = $huidig_maand_getal_enkel; $c < 13; $c++)
    {
    echo "<option value=$c>$c
    ";
    }
    for($d = $huidig_maand_getal_enkel_beneden; $d > 0; $d–)
    {
    echo "<option value=$d>$d
    ";
    }
    ?>[/code:1:3e1e832d8c]
    Deze lus werkt naar behoren; en krijg een mooi pull-down menuutje waarbij de huidige maandnr als eerste staat.
    Maar nu wil ik deze nrs omzetten naar 'maandnamen'. Dus dat ik bijv. 'mei' te zien krijg ipv '5'. Die laatste $c cq $d wordt dan natuurlijk vervangen door een andere variabele.
    Nu zou dat wel kunnen door een hele mooi 'if' functie of met 'case' enzo te werken; maar is er geen handigere manier voor?
    Ik heb heel PHP.net al doorgezocht; maar kon niet iets concreet iets vinden.
    Weet iemand een handige manier?

  • Misschien zoek je dit:
    [code:1:a92561cdd6]date('F',mktime(0,0,0,<maandnummer>));[/code:1:a92561cdd6]
    je krijgt dan:
    [code:1:a92561cdd6]
    <?php
    for($c = $huidig_maand_getal_enkel; $c < 13; $c++)
    {
    echo "<option value=$c>date('F',mktime(0,0,0,$c))
    ";
    }
    for($d = $huidig_maand_getal_enkel_beneden; $d > 0; $d–)
    {
    echo "<option value=$d>date('F',mktime(0,0,0,$d))
    ";
    }
    ?>
    [/code:1:a92561cdd6]Niet getest in deze vorm, dat mag je zelf doen :wink:

  • in je dropdownmenu komen nu eerst de maanden na de huidige (op volgorde van de maand) en daarna komen de maanden voor de huidige (in teruglopende volgorde).
    Is het niet perttiger om zoiets te doen:
    [code:1:e4cc34687f]
    for($c = 0; $c < 12; $c++)
    {
    if($c == $huidig_maand_getal_enkel) continue;

    echo "<option value=$c>date('F',mktime(0,0,0,$c))
    ";
    }
    [/code:1:e4cc34687f]
  • @marientje.
    Ik heb je optie geprobeerd; maar dan krijg ik gewoon een lijst van de maanden. Het is mijn bedoeling dat de huidige maand altijd als eerste optie staat.

    @meneer_ed
    Jou optie werkt idd. Ik had me al een klein beetje verdiept in mktime; maar kwam er niet uit door die duidelijke uitleg van php.net :o
    Nadeel van die optie is dat je alles engelstalig hebt. Dat was nou net niet de bedoeling. Toch heb ik hier ook een nl oplossing verzonnen; alhoewel ik niet snap dat ik daar niet eerder op ben gekomen, nl. een array.
    Net zo simpel doch doeltreffend.
    [code:1:fbbc76639d]
    $huidig_maand_getal = date(m); //maand in getallen (01 - 12)
    $huidig_maand_tekst = date(F); //maand in tekst
    $huidig_maand_getal_enkel_beneden = $huidig_maand_getal_enkel - 1;
    $maanden = array("januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");

    <?php
    for($c = $huidig_maand_getal; $c < 13; $c++)
    {
    $c_teller = $c - 1;
    echo "<option value=$c>$maanden[$c_teller]";
    }
    for($d = $huidig_maand_getal_beneden; $d > 0; $d–)
    {
    $d_teller = $d - 1;
    echo "<option value=$d>$maanden[$d_teller]";
    }
    ?>[/code:1:fbbc76639d]
    Deze werkt ook goed.
    Toch hardstikke bedankt voor je input; nu weet ik ongeveer hoe mktime werkt tenminste :D
  • niet de meest elegante oplossing, maar t werkt wel.
    Je moet overigens niet onderuit als je de namen van de maand in een bepaalde taal wilt hebben. Dat is me nl nog niet gelukt met date() en mktime()

    De NLversie van mktime() is te vinden op http://www.php.net/manual/nl/function.mktime.php
  • Ik vind em wel aardig elegant; zo houd ik de hoeveelheid code toch aardig beperkt.
    Die nl handleiding had ik al gevonden; maar dat schepte nog steeds weinig duidelijkheid voor mij.
  • [quote:21b6b2ea3b="Johnny321"]Nadeel van die optie is dat je alles engelstalig hebt. [/quote:21b6b2ea3b]En daar ben ik dan ook weer een uur van mijn baas zijn tijd aan kwijtgeraakt ;). Gelukkig is het vrijdag :roll:.
    Maar ik heb wel een oplossing gevonden:
    [code:1:21b6b2ea3b]
    setlocale(LC_TIME,'nl_NL');
    [/code:1:21b6b2ea3b]
    Voeg deze regel in voor je code, en vervang
    [code:1:21b6b2ea3b]date('F',mktime(0,0,0,$c))[/code:1:21b6b2ea3b]
    door
    [code:1:21b6b2ea3b]strftime("%B",mktime(0,0,0,$c))[/code:1:21b6b2ea3b]
    Mocht dit niet werken (op een Windows-systeem werkt dit niet), vervang dan 'nl_NL' door 'dutch'.
  • dat is een leuke, dit kende ik nog niet.
    Maar je noemt ook al meteen de problemen ermee:
    als je van een Linux naar een Windows-server overstapt moet je al die talen gaan omzetten. En je moet een koppeling maken tussen je eigen taalsysteem en dat van PHP.

    Maar we dwalen af, volgens mij heeft de TS zijn oplossing gevonden?
  • [quote:bd7609bdf5="marientje"]dat is een leuke, dit kende ik nog niet.[/quote:bd7609bdf5]
    Ik ook nog niet, maar ik verveelde me een beetje ;)
    [quote:bd7609bdf5="marientje"]
    Maar je noemt ook al meteen de problemen ermee:
    als je van een Linux naar een Windows-server overstapt moet je al die talen gaan omzetten. [/quote:bd7609bdf5]
    Heb je me weer aan het testen gezet :o . Ook op mijn Slackware systeem werkt "setlocale(LC_TIME, 'dutch')" als een zonnetje. Het lijkt er dus op dat dat redelijk OS-onafhankelijk is.
    En daarbij, wie wil er nou van Linux naar Windows overstappen :P ? Maar dat is wel erg ver van het topic af.
  • Haha; ik denk dat ik jou optie toch ga toepassen; scheelt me weer een paar bytes aan code 8)
    Bedankt voor je uurtje :P
  • [quote:aa3ae64e86="meneer_ed"]
    Heb je me weer aan het testen gezet :o . Ook op mijn Slackware systeem werkt "setlocale(LC_TIME, 'dutch')" als een zonnetje. Het lijkt er dus op dat dat redelijk OS-onafhankelijk is.
    En daarbij, wie wil er nou van Linux naar Windows overstappen :P ? Maar dat is wel erg ver van het topic af.[/quote:aa3ae64e86]
    ja, maar andersom mssn wel, of, of…
    maar goed, ik ga s kijken of ik dit ga verwerken of t toch houd bij een array met de namen van de maanden per taal op mijn site.

    Iig bedankt voor je uurtje(s) en werk ze!
  • Graag gedaan 8)
    <edit>
    Ik zat nog even te lezen, maar is het niet logischer als de maanden van het jaar altijd in de goede volgorde (van januari tot december) in de lijst staan. En dat je dan de huidige maand gewoon als geselecteerd zet?
    Dit bedoel ik:
    [code:1:479e778f2c]
    for($c = 1; $c < 13; $c++)
    {
    if($c == $huidig_maand_getal)
    echo "<option value=$c selected>" . strftime('%B',mktime(0,0,0,$c)) . "<br>
    ";
    else
    echo "<option value=$c>" . strftime('%B',mktime(0,0,0,$c)) . "<br>
    ";
    }
    [/code:1:479e778f2c]
    Dan krijg je een mooi lijstje (januari, februari, etc) met de huidige maand geselecteerd. Snoept het nog meer bytes van je code volgens mij ;)
    </edit>

  • Ik wist niet dat die optie dr was (heb het niet zo op formulieren).
    Als dat zo is; dan heb ik dus genoeg voor niks gedaan; maarja; al doende leert men van fouten.
    Harstikke bedankt voor je tip; ga ik morgen ff testen
    (moet nu ff naar feest :) )
  • schreef ik hier niet ook al zoiets?

    [quote:6584790b71="marientje"]in je dropdownmenu komen nu eerst de maanden na de huidige (op volgorde van de maand) en daarna komen de maanden voor de huidige (in teruglopende volgorde).
    Is het niet perttiger om zoiets te doen:
    [code:1:6584790b71]
    for($c = 0; $c < 12; $c++)
    {
    if($c == $huidig_maand_getal_enkel) continue;

    echo "<option value=$c>date('F',mktime(0,0,0,$c))
    ";
    }
    [/code:1:6584790b71][/quote:6584790b71]
  • [quote:bf4f2e5e29="marientje"]schreef ik hier niet ook al zoiets?
    [/quote:bf4f2e5e29]Ja, maar zonder het deel dat de huidige maand als geselecteerd markeert. En ik had het hele verhaal nog niet helemaal goed gelezen en jouw tekst niet gezien :oops:

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.