Nederlandse Datum

Door Rien van Hulten, 20 jaar geleden, 7.907x bekeken

Uitleg
Dit is een functie die een timestamp (of een gewone date) omzet naar een Nederlandse datum, bijv: 4 juni 2007 - 07:03 of Vandaag - 07:03 of Gisteren - 07:03 of Eergisteren - 07:03.

Wat maakt deze functie nu zo bijzonder?
* Maakt gebruik van Vandaag, Gisteren en Eergisteren;
* Maakt gebruik van strftime, waardoor de code niet onnodig lang is door allerlei array-fratsen.

Gebruik
Om het gemakkelijk te maken, heb ik het in een functie gezet. Deze heeft maar één variable nodig:
$timestamp: de datum in unix-timestamp, gebruik indien nodig strtotime.

Aanroepen van de functie
Je roept de functie bijv. zo aan (Let op de variabelen!)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
//nu
echo nederlandseDatum(time());
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
//datum uit een bepaalde variabele
echo nederlandseDatum($je_timestamp);
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
//datum uit een bepaalde 'date'-formaat-variabele
echo nederlandseDatum(strtotime($je_date));
?>

Voorbeeld: http://www.rienvanhulten.nl/

Gesponsorde koppelingen

PHP script bestanden

  1. nederlandse-datum

 

Er zijn 20 reacties op 'Nederlandse datum'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
GaMer B
GaMer B
20 jaar geleden
 
0 +1 -0 -1
Er van uitgaande dat het uit een database komt: Klik
Rien van Hulten
Rien van Hulten
20 jaar geleden
 
0 +1 -0 -1
@GaMer13,
* Maakt gebruik van strftime, waardoor de code niet onnodig lang is door allerlei array-fratsen.
En wat doet dat script....
Nick Mulder
Nick Mulder
20 jaar geleden
 
0 +1 -0 -1
Ik weet niet hoor, maar werkt dit script op Linux/Mac servers:
Quote:
//Voor Windows: setlocale(LC_TIME, 'nld_NLD');
Rien van Hulten
Rien van Hulten
20 jaar geleden
 
0 +1 -0 -1
Ja hoor,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setlocale(LC_TIME, 'nl_NL');

Is voor linux-systemen (en waarschijnlijk ook voor mac-systemen; dit weet ik niet helemaal zeker).
Terence Hersbach
Terence Hersbach
20 jaar geleden
 
0 +1 -0 -1
mac = linux
Henk
Henk
20 jaar geleden
 
0 +1 -0 -1
/slap Terence


20 jaar geleden
 
0 +1 -0 -1
Henk verklaar?

mac os x = *nix

Voor Windows moet je nld_NLD gebruiken en voor Linux nl_NL dat is al tijden zo en zal naar verwachting ook voorlopig niet veranderen (of MS of *nix gemeenschap zou dan overstag moeten)

Ik mis netzo als Rien het hele voordeel van dit script. Het enige wat ik zie gebeuren is dmv strftime en setlocale een Nederlandse datum erbij zetten.

Vervolgens wordt er nog even gekeken of het gister was?
Rien van Hulten
Rien van Hulten
20 jaar geleden
 
0 +1 -0 -1
@Webmakerij

Ik wil gewoon laten zien dat het niet zo omslachtig hoeft zoals in dit script.
Frank -
Frank -
19 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT
  naam
FROM
  gebruikers
WHERE
  MONTH(geboortedatum) = MONTH(CURRENT_DATE)
AND
  DAY(geboortedatum) = DAY(CURRENT_DATE)
ORDER BY id

De ORDER BY slaat nergens op, een id heeft geen enkele betekenis, daar kan dus onmogelijk enige volgorde in zitten. Tenzij jij de fout maakt om tóch betekenis toe te kennen aan de volkomen waardeloze waarde van het id. Daar ga je dan nog wel een keer spijt van krijgen. Leermomentje: Een id heeft geen enkele betekenis. punt.
Eddy E
Eddy E
19 jaar geleden
 
0 +1 -0 -1
Jawel, want de oudste leden komen zo bovenaan te staan.
En als oud gediende heb je nou eenmaal bepaalde voordelen ten opzichte van de jonge broekies.

En een ID is (met auto-increment) ideaal om te bepalen welke user het oudst is.
Getallen kunnen meer zeggen dan een cijfer ;).
Jurgen assaasas
Jurgen assaasas
19 jaar geleden
 
0 +1 -0 -1
Eddy, dat doe je dus met een datum veld. De volgorde wordt dus zo bepaald.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
...
ORDER BY datumveld ASC
Frank -
Frank -
19 jaar geleden
 
0 +1 -0 -1
Eddy heeft duidelijk geen enkele ervaring met backups, dan had hij wel geweten dat een id helemaal niets zegt over ouderdom of volgorde.

1) systeem draait lekker, er worden id's uitgedeeld: 1,2,3, etc.
2) systeem crasht....
3) systeem snel weer met een schone database online brengen
4) er worden id's uitgedeeld: 1,2,3, etc.
5) terugzetten van de backup van vóór de crash
6) de oude records moeten nu worden ingevoerd in het nieuwe systeem en krijgen DUS nieuwe id's: ... 4,5,6

En nu gaat jij sorteren op id om de ouderdom te bepalen... Sterkte!
Eddy E
Eddy E
19 jaar geleden
 
0 +1 -0 -1
Met een dagelijkse backup kan je dat gewoon terugzetten.
En je zet dan (althans ik) ook het gebruikersid terug.
Dus niet nieuw beginnen met tellen.

Snel systeem weer opstarten == backup zetten.
En backup terugzetten = al het oude (het tijdelijke dus) verwijderen.

Ik heb inderdaad geen/weinig ervaring met backup. Ik heb het ook nog nooit nodig gehad (ja, van php-scripts die ik zelf stomweg verwijderde).
Maar een database-backup oid heb ik nog nooit nodig gehad.
ID zegt, bij juist gebruik en niet zomaar willekeurig iets toevoegen WEL degelijk iets.
Een ID hoeft niet altijd 1, 2, 3 oid te zijn.
Het kan ook een samengesteld veld zijn.
Frank -
Frank -
19 jaar geleden
 
0 +1 -0 -1
Sorry Eddy, maar dit is een gevalletje onkunde/gebrek aan ervaring. Je kunt niet altijd "even" een backup terugzetten, dan breng je eerst de applicatie weer online (met default) settings en daarna ga je de (mogelijk corrupte) data weer importeren. Deze nieuwe oude data (je leest het goed) kan dan best andere identifiers (id's) krijgen.

Daarnaast maken veel databases gebruik van sequences en niet zoiets knulligs als een auto_increment. Bij de auto_increment van MySQL weet je pas achteraf wat het id is geworden, bij een sequence weet ik dat al voordat het record is aangemaakt. Echter, voordat dit record is aangemaakt, kunnen er best nog andere records worden aangemaakt, die krijgen dan een hoger id maar zijn eerder aangemaakt. Daar is helemaal niets mis mee.

Wat bedoel je trouwens met een id van een samengesteld veld? Doel je daarmee niet op de primary key? Dat is heel wat anders. Bij samengestelde velden kun je al helemaal niet stellen dat er altijd een volgorde van is af te leiden, factuur-id ZZ2007 (waarbij 2007 het jaartal is) is toch echt eerder aangemaakt dan AA2008. Ga daar maar niet oplopend op sorteren met als doel de oudste facturen als eerste te krijgen...

Nogmaals, een id zegt niks over ouderdom of volgorde, het wijst uitsluitend een uniek record aan. Wat er in dat record staat, daar zegt het id helemaal niets over.
Eddy E
Eddy E
19 jaar geleden
 
0 +1 -0 -1
Beste pgFrank: ik mag eerlijk toegeven dat ik nog nooit een backup heb teruggezet en daar dus ook geen ervaring mee heb.
Tevens zijn mijn websites/projecten nooit zo belangrijk dat het direct (dwz: binnen 1 dag) weer online moet staan en moet werken.

Corrupte data vinden is altijd wat lastiger, maar is vaak ook wel te doen (maar goed: ook hier geen ervaring mee).

Jij haalt aan dat auto_increment knullig is. Ik zou niet weten wat er fout aan is.
Ik voeg me records toe zodra iemand pas echt iets wil opslaan in de database. Dat hoeft niet van te voren. Een squences gebruik ik vooral voor een primary-key (bedankt voor dat woord, ik kon er even niet opkomen).
Primary-key kan inderdaad AA2008 zijn. Maar ook daarop is redelijk te sorteren (met SQL kan je ook een soort tekst scheiden in numeriek en alfa-riek. En dan kan je goed sorteren, maar daar gaat het niet om.

Toch blijf ik erbij dat je een ID voor meer dingen kan gebruiken dan enkel en alleen een unieke nummer voor de rij.
Iemands (bij een gebruiker dan) ID veranderd ook nooit.
Je sofi-nummer (niets meer dan een ID) veranderd ook niet.
Mee eens: het sofi-nummer is niet auto-increment ;).
Frank -
Frank -
19 jaar geleden
 
0 +1 -0 -1
Quote:
Mee eens: het sofi-nummer is niet auto-increment ;).

I rest my case! Ga jij maar eens sorteren op het sofi-nummer om te bepalen welke user nu als eerste is toegevoegd in een database. Lagere nummers kunnen zomaar van jongere mensen zijn. (ik heb genoeg voorbeelden hier in de database staan)

Een sofi-nummer is elf-proof en uniek, verder zegt het helemaal niets over de persoon in kwestie. Sorteren op sofi-nummer zegt dan ook niks, het nummer zelf heeft geen enkele betekenis.

Ps. Een auto_increment is niet fout, het is gewoon nogal beperkt in de mogelijkheden. Je hebt er nauwelijks controle over en kunt niet vooraf je queries samenstellen wat zeker in grotere systemen bijzonder handig kan zijn.
Jurgen assaasas
Jurgen assaasas
19 jaar geleden
 
0 +1 -0 -1
Eddy, MySQL heeft geen sequence, wel een auto_increment. bij bijv. PgSQL en Oracle kun je de sequence ook aanspreken, dit kan wenselijk zijn bij een goed genormaliseerde database.
Rien van Hulten
Rien van Hulten
19 jaar geleden
 
0 +1 -0 -1
Gasten, wat heeft dit te maken met mijn script? Gebruik a.u.b. het forum voor zulke discussies!
Robert Deiman
Robert Deiman
19 jaar geleden
 
0 +1 -0 -1
@Eddy Erkelens

pgFrank heeft wel gelijk voor wat betreft het sorteren op id. Het id met auto increment is er ook eigenlijk alleen voor bedoeld om te zorgen dat een record een uniek item heeft waarmee het snel en eenvoudig te identificeren is.
mysql_reference:
The AUTO_INCREMENT attribute can be used to generate a unique identity for new rows:



Op zich is dit wel een nette manier om data in het Nederlands (en met gisteren/eergisteren enz. ) weer te geven. Je kan dit ook met een array doen, dan kan je het allemaal nog wat korter maken, zeker als je ook morgen/ overmorgen wil toevoegen.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jurgen assaasas
Jurgen assaasas
19 jaar geleden
 
0 +1 -0 -1
Je kunt voor dit soort dingen gewoon een case maken

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    naam,
    adres,
    CASE
        WHEN CURRENT_DATE  - INTERVAL '1 day' = datum
            THEN 'Gisteren'
        WHEN CURRENT_DATE  + INTERVAL '1 day' = datum
            THEN 'Morgen'
                           ....
    END
WHERE
    ...


Weet niet of het werkt, niet getest, dit is trouwens de PgSQL manier, ik weet niet of MySQL dit vreet.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. nederlandse-datum

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.