Datum uit db netjes echoen
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,
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
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: 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 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.
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.
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!
Code (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
27
28
29
30
31
32
33
34
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
";
?>
$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
";
?>
Code (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
27
28
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);
?>
// 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);
?>
Code (php)
Output: vrijdag 11 september 2009
Leon schreef op 11.09.2009 17:11:
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.".
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.
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.
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 ; ).
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 !
ik ga is de manier proberen van Jan Koehoorn
Succes.
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
Jan Koehoorn schreef op 11.09.2009 21:32:
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
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.