Gebruiken van datums in PHP
jullie zul vast denken daar heb je 'm weer maar ik loop compleet vast in de datumnotatie naar het Nederlands.
Ik kan maar geen gedegen uitleg vinden hoe ik datum uit een datumveld van de datum kan trekken en die in het NL formaat met de dagnaam ervoor. Dus een datum 2018-11-22 zoals die in database wordt opgeslagen wil op laten tonen als "donderdag 22 november 2018"... als ik ga googlen dan krijg ik zo'n beetje de hele wereld over me heen met welbedoelde adviezen maar de 1 zegt de datefunctie de ander zegt de strftime. De setlocale vliegen om me horen. Weer een ander brult dit moet je zo doen en absoluut niet zo doen...
Hey guys, ik ben nog maar een beginneling en je zal begrijpen dat dit er niet gemakkelijker op maakt.. maar gelukkig is phphulp :-)
Al met al.. ik kom er vooralsnog niet uit. Heeft iemand een werkende oplossing of weet misschien een leesbare tekst die hierover gaat.. Php.net is ook niet de gemakkelijkste site om te lezen..
Alweer ongelofelijk bedankt jongens...
Edit:
Titel aangepast van 'Knettergek, maar dan ook knettergestoord word ik van de date in php' naar 'Gebruiken van datum in PHP'
Gewijzigd op 22/11/2018 19:50:03 door - Ariën -
even zoeken naar wat je moet hebben.
De standaard DateTime class in PHP is daarentegen nog flexibeler omdat je eenvoudig kan rekenen.
De verschillen tussen date() en strftime is dat je met strftime() ook locales kan gebruiken, zoals 'Maandag' i.p.v. de standaard 'Monday'. Helaas is bij beiden functies de notatie weer anders, dus het blijft altijd bij beiden De standaard DateTime class in PHP is daarentegen nog flexibeler omdat je eenvoudig kan rekenen.
Gewijzigd op 22/11/2018 19:48:49 door - Ariën -
geef ik net aan dat php.net zeer lastig is om te lezen als beginneling en dan krijg ik alleen maar verwijzingen daar naar toe... zijn er dan nergens behapbare teksten die het begrijpelijker maken???
Waar loop je nou precies tegenaan? Om een datum in PHP te gebruiken zijn er nou eenmaal vele wegen die naar Rome leiden. Wel is de een wat uitgebreider dan de andere.
Gewijzigd op 22/11/2018 20:26:56 door - Ariën -
waar ik naar op ben had ik al geschreven... . Ik ben dus op zoek hoe ik een datum 2018-11-22 zoals die in database wordt opgeslagen kan tonen als "donderdag 22 november 2018".
Maar je kan ook deze handeling door MySQL zelf laten uitvoeren:
Gewijzigd op 22/11/2018 21:22:52 door - Ariën -
Met de genoemd php optie krijg ook hier niet de opgeslagen datum in de gewenst format op scherm. De datum, die is opgeslagen is als JJJJ-MM-DD. Maar om nu hier bijvoorbeeld donderdag 22 november 2018 te maken.
Blijft een lastig punt de date functie. Moeilijk te doorgronden.
En wat heb je al geprobeerd?
Laat maar zitten
Gewijzigd op 22/11/2018 22:32:35 door - Ariën -
Duidelijker dan dat ik heb omschrijven lukt me niet....
Ik zou zeggen: Download eens wat stukjes code en probeer deze te doorgronden.
Kan zelfs even snel in een sandbox.
Evengoed had ik je graag willen helpen, maar dat schiet niet op met een "Laat maar zitten".
Misschien is het eventjes voor nu te veel en moet je het laten bezinken tot morgen? Wie weet is het dan duidelijker ;-)
Als iets niet lukt, kom dan graag met voorbeelden aan, we weten immers niet wat je geprobeerd hebt.
Gewijzigd op 22/11/2018 22:56:48 door - Ariën -
het lukt me gewoonweg niet om de datum in NL weer te geven... Nou dan maar in de standaard jjjj-mm-dd weergaven...
brand is erger.
Te doorgronden is het moeilijk als er meer dan 1001 google resulaten iets anders laat zien en de een de andere de grond inboord.. daar wordt het niet duidelijker op..
Die codes die je hebt aangedragen heb ik uitgelegd dat ze niet toereikend waren waarom ik denk dat het zo is...
het zal ooit wel 'ns op zijn pootje terechtkomen.
Quote:
Format the time and/or date according to locale settings. Month and weekday names and other language-dependent strings respect the current locale set with setlocale.
Of in Windows:
of in MySQL, na je connectie:
Op Windows werkt dit overigens lastiger....
Gewijzigd op 22/11/2018 23:46:09 door - Ariën -
Wat je dus kunt doen als je beide wilt ondersteunen is:
Deze locale namen werken hetzelfde binnen MySQL. Daar zul je alleen moeten kijken wat het platform is; de database draait immers niet gegarandeerd op dezelfde server als PHP.
zoals ik al zei.. laat maar zitten. Je snapt het inderdaad niet..
dat gedoe rond die set locale zal wel snor zitten en dat geloof ik allemaal wel..
maar de php echo code om de waarde uit het datumveld van de database te trekken heb ik niet veel aan de set locale.
we hebben hier nu al veel verkeer over... kan me beter om andere zaken focussen.. dit zal ooit tzt wel een keer opgelost worden...
maar waarom je nu de titel hebt aangepast 'Knettergek, maar dan ook knettergestoord word ik van de date in php' naar 'Gebruiken van datum in PHP'' , is me niet duidelijk.. want het is toch ook om knetter vna te worden..
toch bedankt voor het meedenken
Je kunt een datum formatteren zoals je wilt voordat je deze weergeeft op het scherm, en het is een goede zaak dat deze als YYYY-MM-DD formaat in je database zit, omdat je er op die manier mee kunt rekenen en sorteren, dat wordt een stuk lastiger als deze op een voorgekookte manier is geformatteerd, dan wordt filteren en sorteren een stuk moeilijker zo niet onmogelijk.
Daarom zou ook eigenlijk mijn voorkeur uitgaan naar een oplossing dichter bij de "presentatie(laag)" oftewel in PHP. Een functie zou misschien aan te bevelen zijn, o.a. omdat je dan de formattering op één plek regelt. Je kunt deze dan een datum uit je database voeren (in YYYY-MM-DD formaat) en deze functie spuugt vervolgens iets uit in het format zoals jij dit wilt.
Als je in al dat gezever met setlocale geen zin hebt kun je zoiets doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function myDateFormat($in) {
$d = new DateTime($in);
$dayNames = array(0 => 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');
$monthNames = array(1 => 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
return sprintf('%s %d %s %d',
$dayNames[$d->format('w')], // 4 -> donderdag
$d->format('j'), // 22
$monthNames[$d->format('n')], // 11 -> november
$d->format('Y') // 2018
);
}
$date = '2018-11-22';
echo myDateFormat($date);
?>
function myDateFormat($in) {
$d = new DateTime($in);
$dayNames = array(0 => 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');
$monthNames = array(1 => 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
return sprintf('%s %d %s %d',
$dayNames[$d->format('w')], // 4 -> donderdag
$d->format('j'), // 22
$monthNames[$d->format('n')], // 11 -> november
$d->format('Y') // 2018
);
}
$date = '2018-11-22';
echo myDateFormat($date);
?>
Maar met een werkende locale (wat uiteraard beter is) kan het wat korter:
Code (php)
Verder weet ik niet helemaal wat je verwacht van dit forum (of van hulp op het internet in het algemeen). Enige eigen inspanning lijkt mij hier wel van toepassing. We snappen dat niet iedereen even tech savvy is, maar dan moet je je ook afvragen of je gelukkig wordt van het verdiepen in een programmeertaal als je weinig affiniteit met programmeren hebt. Wellicht is het dan handiger dat je een vacature plaatst of een stagiair(e) werft.
Gewijzigd op 23/11/2018 00:10:16 door Thomas van den Heuvel
Verder heb ik ook al uitgelegd dat je in geval van een database DATE_FORMAT() moet gebruiken, en hoe je dat moet gebruiken. En dat je na je connectie ook de genoemde SET-query moet draaien.
De topictitel heb ik aangepast omdat dit niet je probleem omschrijft. Anderen moeten aan je topictitel eenvoudig kunnen zien wat je probleem is. Dat je er knettergek van wordt doet anderen er niet toe. Dat kan je wel in je bericht laten weten.
Ik zou zeggen: Laat het even bezinken, en kijk morgen of eerdaags eens verder. Ik kan me indenken dat je na uren turen er niks meer van snapt. Dus neem even rust en grote kans dat het morgen beter gaat.
Gewijzigd op 23/11/2018 00:14:31 door - Ariën -
zucht
Dirk Huizinga op 22/11/2018 19:36:04:
Dus een datum 2018-11-22 zoals die in database wordt opgeslagen wil op laten tonen als "donderdag 22 november 2018"
Gewoon uit de database trekken op dezelfde manier als alle andere data en dan, voordat je deze weergeeft, door een formatteringsfunctie halen zoals in de reacties hierboven staat uitgelegd.
Wat is hier onduidelijk aan?
Dirk Huizinga op 23/11/2018 00:22:09:
zucht
Ga eens lekker slapen, en probeer onze adviezen morgen eens op te volgen. ;-)