Gebruiken van datums in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

- DHU -

- DHU -

22/11/2018 19:36:04
Quote Anchor link
Hoi allemaal,

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 -
 
PHP hulp

PHP hulp

24/11/2024 08:11:46
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 19:48:37
Quote Anchor link
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 even zoeken naar wat je moet hebben.

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 -
 
- DHU -

- DHU -

22/11/2018 20:15:51
Quote Anchor link
nou dit helpt :-)..
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???
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 20:22:09
Quote Anchor link
Er staat toch duidelijk bij vermeld wat welke format-letter(s) precies doen?

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 -
 
- DHU -

- DHU -

22/11/2018 20:42:07
Quote Anchor link
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".
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 21:21:04
Quote Anchor link
Je kan gebruik maken van DateFormat()
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$date
= new DateTime('2019-03-23');
echo $date->format('d M Y H:i:s');
?>


Maar je kan ook deze handeling door MySQL zelf laten uitvoeren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATE_FORMAT(datum_veld, "%Y") AS jaar FROM tabel  
Gewijzigd op 22/11/2018 21:22:52 door - Ariën -
 
- DHU -

- DHU -

22/11/2018 21:49:32
Quote Anchor link
Sorry maar hier komt ik toch niet weg. De SQL optie is prima om de huidige datum weer te geven.. .maar als een datum in een veld is opgeslagen krijg ik die daar niet mee uit (althans mij lukt het niet ;-)

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.
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 21:58:37
Quote Anchor link
Hoe is die datum opgeslagen in je database? En heeft deze wel het DATETIME-type?
En wat heb je al geprobeerd?
 
- DHU -

- DHU -

22/11/2018 22:27:35
Quote Anchor link
Laat maar zitten
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 22:32:21
Quote Anchor link
Ik wil je best helpen, maar als je wat duidelijk bent dan kunnen we je gerichter advies geven. Of heb je het al opgelost?
Gewijzigd op 22/11/2018 22:32:35 door - Ariën -
 
- DHU -

- DHU -

22/11/2018 22:45:37
Quote Anchor link
Duidelijker dan dat ik heb omschrijven lukt me niet....
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 22:55:58
Quote Anchor link
Ik heb voorbeelden gegeven, het overzicht op de benoemde sites is naar mijn idee best duidelijk met voorbeelden. Ik weet anders ook niet waar de bottleneck zit. Ook ik ben overigens als beginner op php.net binnengekomen om PHP te leren en als je de Engelse taal kent, is het geen probleem.

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 -
 
- DHU -

- DHU -

22/11/2018 23:27:03
Quote Anchor link
het is misschien iets te veel van het goede... maar duidelijks als aangegeven kan ik niet ... ik heb een databaseveld met een bepaalde notatie die ik op de nl manier wil weergeven... wat ik geprobeerd heb is zo'n beetje te veel om hier te gaan beshrijven want dan ben ik een week bezig denk ik...

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.
 
- Ariën  -
Beheerder

- Ariën -

22/11/2018 23:40:28
Quote Anchor link
Heb je de locale al ingesteld?
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.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setlocale(LC_ALL, 'nl_NL');


Of in Windows:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setlocale(LC_ALL, 'nl_NL','nl', 'du', 'dutch');


of in MySQL, na je connectie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SET lc_time_names = 'nl_NL';


Op Windows werkt dit overigens lastiger....
Gewijzigd op 22/11/2018 23:46:09 door - Ariën -
 
Ben van Velzen

Ben van Velzen

22/11/2018 23:52:56
Quote Anchor link
Het is niet zozeer lastiger, de locales heten wel anders. Voor Nederlands is de locale 'nld_nld' beschikbaar.
Wat je dus kunt doen als je beide wilt ondersteunen is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
setlocale(LC_ALL, 'nl_NL', 'nld_nld');
?>


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.
 
- DHU -

- DHU -

22/11/2018 23:53:00
Quote Anchor link
Hoi Arien,

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
 
Thomas van den Heuvel

Thomas van den Heuvel

23/11/2018 00:09:17
Quote Anchor link
Hoe je iets opslaat en hoe je iets weergeeft zijn twee verschillende dingen.

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)
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
<?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);
?>

Maar met een werkende locale (wat uiteraard beter is) kan het wat korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$date
= '2018-11-22';

function
myDateLocale($in) {
    $d = new DateTime($in);
    return $d->format('l j F Y'); // donderdag 22 november 2018
}

echo myDateLocale($date);
?>

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
 
- Ariën  -
Beheerder

- Ariën -

23/11/2018 00:13:00
Quote Anchor link
Je wilt de datum in het Nederlands tonen, en die oplossing reik ik ook toe.
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 -
 
- DHU -

- DHU -

23/11/2018 00:22:09
Quote Anchor link
zucht
 
Thomas van den Heuvel

Thomas van den Heuvel

23/11/2018 00:29:00
Quote Anchor link
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?
 
- Ariën  -
Beheerder

- Ariën -

23/11/2018 00:43:35
Quote Anchor link
Dirk Huizinga op 23/11/2018 00:22:09:
zucht

Ga eens lekker slapen, en probeer onze adviezen morgen eens op te volgen. ;-)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.