Versio

Datum uit db netjes echoen

Overzicht Reageren

Milo

Milo

11/09/2009 16:14:00
Quote Anchor link
Hey,

Ben nu bijna een jaar bezig met php, maar die datums zijn toch nog best irritant...
eerst gebruikten ik altijd explode om dan de hele datum te exploden en dan met function de maand veranderen in bijv november...
maar dit schijnt niet de goede manier te zijn :P:P

Nu vroeg ik me af hoe krijg ik nu de datum uit me database en dat ik hem dan vervolgens netjes kan echoen..

Gr,
 
PHP hulp

PHP hulp

24/05/2012 09:11:48
Gesponsorde koppelingen:
 
Leon Vosmeijer

Leon Vosmeijer

11/09/2009 16:18:00
Quote Anchor link
Ik weet precies wat je bedoeld en ik denk dat de meeste programmeurs het probleem kennen.

Ik los dit probleem op door overal altijd unix timestamps te gebruiken. De timestamps zijn een stuk makkelijker te verwerken dan een datum string...

Toch... er zijn genoeg mensen die in de database ook gelijk kunnen lezen wat erin staat (niks op tegen though). Mocht je ook zo iemand zijn, dan zou ik alsnog de unix timestamp als rode draad gebruiken en een extra kolom in je table inbakken waar een human readable datum instaat.

Groeten,
Leon
 
Jesper Diovo

Jesper Diovo

11/09/2009 17:02:00
Quote Anchor link
@Leon: Nooit, maar dan ook nooit iemand aanbevelen met timestamps te gaan werken. Een datum is een datum, meestal in het d-M-Y formaat. Een datum is dus geen tijd, en zeker geen stamppot. Wat kun je nu direct aflezen uit een timestamp? Helemaal niets. Je moet telkens blijven terugkoppelen op verschillende functies om de juiste datum eruit te halen. Daar heb je niets aan, bovendien zijn er genoeg manieren om een datum wel juist en makkelijk te kunnen behandelen. Bekijk eens de DateTime class, of houdt het op - inderdaad - explode. Het zelf stapje-voor-stapje uitvoeren is nog altijd simpeler en beter, dan te gaan zitten klooien met timestamps. Bah, bah, bah.
 
Leon Vosmeijer

Leon Vosmeijer

11/09/2009 17:11:00
Quote Anchor link
Jezpur schreef op 11.09.2009 17:02:
[...]
Wat kun je nu direct aflezen uit een timestamp? Helemaal niets. Je moet telkens blijven terugkoppelen op verschillende functies om de juiste datum eruit te halen. Daar heb je niets aan, bovendien zijn er genoeg manieren om een datum wel juist en makkelijk te kunnen behandelen. Bekijk eens de DateTime class, of houdt het op - inderdaad - explode. Het zelf stapje-voor-stapje uitvoeren is nog altijd simpeler en beter, dan te gaan zitten klooien met timestamps. Bah, bah, bah.


Het aflezen van timestamps is ook geen lolletje :-) daarom ook m'n antwoord: "Toch... er zijn genoeg mensen die in de database ook gelijk kunnen lezen wat erin staat (niks op tegen though). Mocht je ook zo iemand zijn, dan zou ik alsnog de unix timestamp als rode draad gebruiken en een extra kolom in je table inbakken waar een human readable datum instaat.".

Jezpur:
Je moet telkens blijven terugkoppelen op verschillende functies om de juiste datum eruit te halen.


Dit zal met een 'normale' date format ook moeten. En alles via de DB laten verwerken is vooralsnog sneller dan het met PHP te verwerken.
 
Eddy Erkelens

Eddy Erkelens

11/09/2009 17:15:00
Quote Anchor link
och och och strftime() toch?

Trouwens: SQL slaat een DATE ook gewoon op als een timestamp, ze zijn immers ook exact even groot.
Maar toch is een DATE beter, inderdaad om makkelijker af te lezen in de database zelf. Ga GEEN extra kolom maken met een 'leesbare' datum, die je vervolgens niet gebruikt.
Eén keer een DATE (of DATETIME) is genoeg.
Met strftime(), strtotime(), date() en nog 20 andere functies moet dat echt wel lukken.

Vergeet de set_locale() niet!
 
Jan Koehoorn

Jan Koehoorn

11/09/2009 17:19:00
Quote Anchor link
Kopiëer deze even, daar kun je ongeveer alles mee:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
27
28
29
30
31
32
33
34
<?php
    $sql
= "
        SELECT
        DATE_FORMAT(datumtijdveld, '%e') AS dag,
        ELT(
            (DATE_FORMAT(datumtijdveld, '%w') + 1),
            'zondag',
            'maandag',
            'dinsdag',
            'woensdag',
            'donderdag',
            'vrijdag',
            'zaterdag'
            ) AS weekdag,
        ELT(
            (DATE_FORMAT(datumtijdveld, '%c')),
            'januari',
            'februari',
            'maart',
            'april',
            'mei',
            'juni',
            'juli',
            'augustus',
            'september',
            'oktober',
            'november',
            'december'
            ) AS maand,
        YEAR(datumtijdveld) AS jaar,
        DATE_FORMAT(datumtijdveld, '%H:%s') AS tijd_kort,
        DATE_FORMAT(datumtijdveld, '%Y-%m-%d') AS datum_kort
    "
;
?>
 
Tim Groot

Tim Groot

11/09/2009 17:27:00
Quote Anchor link
In principe het zelfde idee als Jan. Maar dan in een functie gepropt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
27
28
<?php

// Functie toon dag maand en jaar van een datum (sql geeft nl yyyy-mm-dd)
    function Anndate($date) {
        $day = substr($date, 8, 2);
        $month = (int) substr($date, 5, 2);
        $year = (int) substr($date, 0, 4);
        switch ($month) {
            case
  1: return "$day januari $year";
            case
  2: return "$day februari $year";
            case
  3: return "$day maart $year";
            case
  4: return "$day april $year";
            case
  5: return "$day mei $year";
            case
  6: return "$day juni $year";
            case
  7: return "$day juli $year";
            case
  8: return "$day augustus $year";
            case
  9: return "$day september $year";
            case
10: return "$day oktober $year";
            case
11: return "$day november $year";
            case
12: return "$day december $year";
    }
}


// bovenstaande de functie en dan onderstaande voor het weergeven:

echo Anndate($HIER_DE_DATUM_UIT_DB);

?>
 
Jan Koehoorn

Jan Koehoorn

11/09/2009 17:32:00
Quote Anchor link
Als je mazzel hebt, kan het zo ook en heb je geen eigen functie nodig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
    ini_set ('display_errors', 1);
    error_reporting (E_ALL | E_STRICT);

    date_default_timezone_set ('Europe/Amsterdam');
    setlocale(LC_ALL, 'nl_NL');
    $datum = '2009-09-11';
    
    echo strftime ('%A %d %B %Y', strtotime ($datum));
?>

Output: vrijdag 11 september 2009
 
Jesper Diovo

Jesper Diovo

11/09/2009 17:47:00
Quote Anchor link
Leon schreef op 11.09.2009 17:11:
Jezpur schreef op 11.09.2009 17:02:
[...]
Wat kun je nu direct aflezen uit een timestamp? Helemaal niets. Je moet telkens blijven terugkoppelen op verschillende functies om de juiste datum eruit te halen. Daar heb je niets aan, bovendien zijn er genoeg manieren om een datum wel juist en makkelijk te kunnen behandelen. Bekijk eens de DateTime class, of houdt het op - inderdaad - explode. Het zelf stapje-voor-stapje uitvoeren is nog altijd simpeler en beter, dan te gaan zitten klooien met timestamps. Bah, bah, bah.


Het aflezen van timestamps is ook geen lolletje :-) daarom ook m'n antwoord: "Toch... er zijn genoeg mensen die in de database ook gelijk kunnen lezen wat erin staat (niks op tegen though). Mocht je ook zo iemand zijn, dan zou ik alsnog de unix timestamp als rode draad gebruiken en een extra kolom in je table inbakken waar een human readable datum instaat.".

Jezpur:
Je moet telkens blijven terugkoppelen op verschillende functies om de juiste datum eruit te halen.


Dit zal met een 'normale' date format ook moeten. En alles via de DB laten verwerken is vooralsnog sneller dan het met PHP te verwerken.


Hou alsjeblieft op en ga geen timestamps lopen verdedigen. Dat is zonde van je tijd en zinloos. Een timestamp stelt gewoon niets voor, het kan niet op tegen een datum. Met een datum weet je wat je hebt, met een timestamp heb je een paar getallen, who knows wat ze voorstellen?

Tuurlijk, alles via de database is sneller. Dat is ook zo, en daarom heeft SQL ook verschillende functies gekregen om direct met data aan de slag te kunnen (zie Jans reactie). Met een timestamp moet je niet willen werken, dan klopt er ergens iets niet.

Van mij mag jij best blijven werken met timestamps, je komt jezelf wel tegen, maar ga anderen alsjeblieft niet aanbevelen ze te gebruiken. Dat is namelijk een van de slechtste dingen die je iemand bij het programmeren kunt aanleren ; ).
 
Hall Leeuwenburgh

Hall Leeuwenburgh

11/09/2009 20:29:00
Quote Anchor link
Ik denk eindelijk iemand die gelukkig ook met Timestamp werkt maar de reacties zijn gelijk weer heftig hier op tegen. Het is maar net hoeveel ervaring en verstand je met de beschikbare datum functies hebt. Je kan je niet in alles tegelijk verdiepen toch !
 
Milo

Milo

11/09/2009 20:33:00
Quote Anchor link
Zo te zien geen timestamp?? :P

ik ga is de manier proberen van Jan Koehoorn
 
Jesper Diovo

Jesper Diovo

11/09/2009 21:21:00
Quote Anchor link
@Hall: ik denk dat 80% hier op PHPHulp timestamps afkeurt. De 20% die overblijft hebben (pg)Frank wss nooit gekend, zijn eigenwijs of willen niet goed kunnen programmeren. Programmeren heeft niet alleen goede kanten, en het ligt aan de programmeur zelf welke kant hij kiest. Sommige manieren zijn gewoon fout en achterhaalt, dat zal iemand je moeten vertellen voordat je er domweg zelf achter komt en je alles opnieuw zult moeten doen.

Succes.
 
Jan Koehoorn

Jan Koehoorn

11/09/2009 21:32:00
Quote Anchor link
Jezpur schreef op 11.09.2009 21:21:
@Hall: ik denk dat 80% hier op PHPHulp timestamps afkeurt. De 20% die overblijft hebben (pg)Frank wss nooit gekend, zijn eigenwijs of willen niet goed kunnen programmeren.


Dit noemen we drogredenen in de logica. Het heeft niets te maken met de (vermeende) autoriteit van pgFrank, eigenwijsheid of niet goed willen programmeren. Met dit soort feedback kan een beginnende programmeur weinig.

Onderbouw je verhaal met echte argumenten, dan help je de vraagsteller veel beter.

Voordelen van MySQL:
1) meer en betere functies voor datum- en tijdberekeningen
2) groter bereik, dus ook datums van voor 1970
 
Jesper Diovo

Jesper Diovo

11/09/2009 21:47:00
Quote Anchor link
Jan Koehoorn schreef op 11.09.2009 21:32:
Jezpur schreef op 11.09.2009 21:21:
@Hall: ik denk dat 80% hier op PHPHulp timestamps afkeurt. De 20% die overblijft hebben (pg)Frank wss nooit gekend, zijn eigenwijs of willen niet goed kunnen programmeren.


Dit noemen we drogredenen in de logica. Het heeft niets te maken met de (vermeende) autoriteit van pgFrank, eigenwijsheid of niet goed willen programmeren. Met dit soort feedback kan een beginnende programmeur weinig.

Onderbouw je verhaal met echte argumenten, dan help je de vraagsteller veel beter.

Voordelen van MySQL:
1) meer en betere functies voor datum- en tijdberekeningen
2) groter bereik, dus ook datums van voor 1970


Quote:
Sommige manieren zijn gewoon fout en achterhaalt, dat zal iemand je moeten vertellen voordat je er domweg zelf achter komt en je alles opnieuw zult moeten doen.


Ik weet dat de redenen niet altijd even redelijk zijn, maar als het merendeel van een programmeer-community een onderdeel van programmeren afkeurt, mag je aannemen dat dat niet goed is.

En je bedoelt zeker de voordelen van datetimes t.o.v. timestamps.
 



Overzicht Reageren

Get Adobe Flash player