[PHP/MySQL] Maand uit datum halen met in-array

Pagina: 1
Acties:
  • 193 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Parmenides
  • Registratie: Juni 2003
  • Laatst online: 02-08 13:41
Ik wil de naam van een maand tonen als bijvoorbeeld '09-03-2006' uit de database wordt gehaald. En ' 2007' daar nog achteraan als het om een datum in 2007 gaat.

Om dit te bereiken heb ik (na de query) de volgende php-code staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$datum = explode(", ", $row['datum']);
if (in_array("01", $datum)) echo "Januari";
if (in_array("02", $datum)) echo "Februari";
if (in_array("03", $datum)) echo "Maart";
if (in_array("04", $datum)) echo "April";
if (in_array("05", $datum)) echo "Mei";
if (in_array("06", $datum)) echo "Juni";
if (in_array("07", $datum)) echo "Juli";
if (in_array("08", $datum)) echo "Augustus";
if (in_array("09", $datum)) echo "September";
if (in_array("10", $datum)) echo "Oktober";
if (in_array("11", $datum)) echo "November";
if (in_array("12", $datum)) echo "December";
if (in_array("2006", $datum)) echo "";
if (in_array("2007", $datum)) echo " 2007";

Maar dit geeft een leeg resultaat. Wat wel werkt is:
PHP:
1
if (in_array("09-03-2006", $datum)) echo "Maart";

Maar daar heb ik niks aan, aangezien het om elke willekeurige datum kan gaan. Weet iemand hoe ik dit op kan lossen?

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

Je split op ', ' en je hebt het in je database staan als xx-xx-xxxx? Natuurlijk gaat het dan niet werken. :)

(toch? * Spockz is slaperig)

Bovendien, op deze manier krijg je ook als het de eerste van de februari is Januari te staan met daarachter Februari.
Kun je niet beter 01-02-2006 rewriten naar 1 januari 2006? Volgensmij een stuk makkelijker maar het ligt eraan wat je ermee wilt natuurlijk. :)

[ Voor 73% gewijzigd door Spockz op 25-02-2006 18:05 ]

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

Verwijderd

Wat gebeurt er nu als de datum: 04-01-2006 is? Dan krijg je: "JanuarieApril"

Het volgende is denk ik handiger:
PHP:
1
2
3
4
5
6
7
8
9
$maanden = array( '01'=>'Januarie', '02'=>'Februarie' ); #enz....

$maandNr = substr( $row['datum'], 3,2 );

echo $maanden[ $maandNr ];
if( substr( $row['datum'], 6, 4 ) == '2007' )
{
  echo '2007';
}

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
if( substr( $row['datum'], 6, 4 ) == '2007' )
{
  echo '2007';
}
Zonder in de afgelopen jaren php aan geraakt te hebben (dus zo ongetest als het maar kan) lijkt een if me overbodig:
PHP:
1
echo substr( $row['datum'], 6, 4 );


@roemer: woops, sorry. my bad.

[ Voor 15% gewijzigd door Verwijderd op 25-02-2006 19:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

niet als je naar dit stukje kijkt
PHP:
1
2
if (in_array("2006", $datum)) echo "";
if (in_array("2007", $datum)) echo " 2007";


(en als je in de startpost kijkt, 2e zin)

[ Voor 18% gewijzigd door Verwijderd op 25-02-2006 18:23 ]


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op zaterdag 25 februari 2006 @ 18:03:
Wat gebeurt er nu als de datum: 04-01-2006 is? Dan krijg je: "JanuarieApril"

Het volgende is denk ik handiger:
PHP:
1
2
3
4
5
6
7
8
9
$maanden = array( '01'=>'Januarie', '02'=>'Februarie' ); #enz....

$maandNr = substr( $row['datum'], 3,2 );

echo $maanden[ $maandNr ];
if( substr( $row['datum'], 6, 4 ) == '2007' )
{
  echo '2007';
}
Denk dat dit dan handiger is misschien ook zelfs sneller...:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$maand = array(
1 => "Januari", 2 => "Februari", 3 => "Maart", 
4 => "April", 5 => "Mei", 6 => "Juni", 
7 => "Juli", 8 => "Augustus", 9 => "September", 
10 => "Oktober", 11 => "November", 12 => "December"
);

$curdate = explode("-", $row['datum']); // Er van uitgaande dat de dateformat MMDDYYYY is (standaard in MySQL als ik het me goed herinner)

foreach($maand as $key => $val)
{
    if($key == $curdate[0])
    {
        $curmonth = $val;
    }
}

echo $curmonth;

// De dag en het jaar kan je dan uit $curdate halen ($curdate[1] is de dag $curdate[2] is dan het jaar :) )
Spockz schreef op zaterdag 25 februari 2006 @ 17:53:
Kun je niet beter 01-02-2006 rewriten naar 1 januari 2006? Volgensmij een stuk makkelijker maar het ligt eraan wat je ermee wilt natuurlijk. :)
Mierenneukertje: 2 Januari 2006 :+

Snap eigenlijk ook niet helemaal waarom sommigen van jullie getallen als tekst behandelen en niet als een integer (getal), dat werkt sneller en is bovendien (vind ik) netter ;)

@Parmenides: Mij is het eigenlijk onduidelijk, waarom je spullen dat uit een database komt wil controleren, bedoel, als je een script hebt, controleer je toch juist de input, voordat het in de DB komt, hoef je daarna als je het uit de DB trekt ook niet meer te controleren... ;)

[ Voor 53% gewijzigd door CH4OS op 25-02-2006 18:35 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Ik gebruik zelf zoiets om datumstrings te vertalen. Niet zo efficient als een array van het maandnummer=>weergave formaat, maar je kunt in de rest van je applicatie gewoon gebruik maken van MySQL's DATE_FORMAT() en php's mogelijkheden om datums op te maken.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function translateDateToDutch($dateString) {
    $dateTranslations = array (
        'Monday'    => 'Maandag',   'Mon' => 'Ma',
        'Tuesday'   => 'Dinsdag',   'Tue' => 'Di',
        'Wednesday' => 'Woensdag',  'Wed' => 'Wo',
        'Thursday'  => 'Donderdag', 'Thu' => 'Do', 
        'Friday'    => 'Vrijdag',   'Fri' => 'Vr',
        'Saturday'  => 'Zaterdag',  'Sat' => 'Za',
        'Sunday'    => 'Zondag',    'Sun' => 'Zo',

        'January'   => 'Januari',
        'February'  => 'Februari',
        'March'     => 'Maart',
        'May'       => 'Mei',
        'June'      => 'Juni',
        'July'      => 'Juli',
        'August'    => 'Augustus',
        'Mar' => 'Mrt',
        'Oct' => 'Okt'
        );

    foreach ($dateTranslations as $english => $dutch) {
        $dateString = str_replace($english, $dutch, $dateString);
    }
    return $dateString;
}

[ Voor 30% gewijzigd door T-MOB op 25-02-2006 19:14 . Reden: October is met een k in het Nederlands ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Parmenides
  • Registratie: Juni 2003
  • Laatst online: 02-08 13:41
GJ-tje schreef op zaterdag 25 februari 2006 @ 18:25:
Denk dat dit dan handiger is misschien ook zelfs sneller...:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$maand = array(
1 => "Januari", 2 => "Februari", 3 => "Maart", 
4 => "April", 5 => "Mei", 6 => "Juni", 
7 => "Juli", 8 => "Augustus", 9 => "September", 
10 => "Oktober", 11 => "November", 12 => "December"
);

$curdate = explode("-", $row['datum']); // Er van uitgaande dat de dateformat MMDDYYYY is (standaard in MySQL als ik het me goed herinner)

foreach($maand as $key => $val)
{
    if($key == $curdate[0])
    {
        $curmonth = $val;
    }
}

echo $curmonth;

// De dag en het jaar kan je dan uit $curdate halen ($curdate[1] is de dag $curdate[2] is dan het jaar :) )
Dank voor jullie hulp! Maar ik ben er nog niet helemaal. Ik haal de data uit mijn database niet als MMDDYYYY op maar met:
code:
1
SELECT date_format(datum,'%d-%m-%Y') as datum
Dus bij '09-03-2006' verschijnt nu 'September' op het scherm. Hoe dit te fixen?

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Parmenides schreef op zaterdag 25 februari 2006 @ 19:10:
[...]
Dank voor jullie hulp! Maar ik ben er nog niet helemaal. Ik haal de data uit mijn database niet als MMDDYYYY op maar met:
code:
1
SELECT date_format(datum,'%d-%m-%Y') as datum
Dus bij '09-03-2006' verschijnt nu 'September' op het scherm. Hoe dit te fixen?
In die code bevat $curdate[0] het eerste element van je datumstring. Als de maand de 2e is moet je $curdate[1] vervangen.

--edit--
Overigens is het in die code natuurlijk onzinnig om over je hele maand-array heen te lopen. Als het maandnummer hebt kun je ook gewoon het array aanspreken.
PHP:
1
2
3
4
5
$monthArray = array ('Onbekend', 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus','September','Oktober','November','December');
$date = '01-04-2006';
list($day, $month, $year) = explode('-', $date);
$I_month = (int) $month;
printf("%s %s %s", $day, $monthArray[$I_month], $year);

[ Voor 48% gewijzigd door T-MOB op 25-02-2006 19:23 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Parmenides
  • Registratie: Juni 2003
  • Laatst online: 02-08 13:41
$curdate[1], natuurlijk. :)
Dank voor de response!

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Heb je al naar PHP's datumfuncties gekeken? Met name strtotime en strftime (icm locale voor Nederlandse taal) lijken me van toepassing.

[ Voor 6% gewijzigd door GlowMouse op 25-02-2006 20:01 ]

Pagina: 1