Date probleem
Klanten voeren o.a. handmatig een sluitingsdatum in voor een offerte in de setting dd-mm-jjjj, welke vervolgens geschreven moet worden in een "Date" veld in in database om deze later te kunnen orderen. (probleem 1: het invoeren van een dergelijke datumnotatie wordt al in een verkeerde notatie in de database opgenomen op deze wijze.
Vervolgens wil ik deze sluitingsdatum ordenen (in nederlandse notatie DD-MM-JJJJ) . De dichtbijzijnde sluitingsdatum boven aan, 2de, etc.
Concrete vraag: Heeft iemand een idee hoe ik een nederlandse datumnotatie op een correcte manier in de database kan zetten in een datefield OF eventueel met één of andere omzetting van datumnotatie. NL->ENG(db)->NL?
Graag jullie reactie!
Graag jullie reactie.
mensen een datum met de hand laten invullen is vragen om moeilijkheden. Ik gebruik altijd drie selectboxen. Daarna doe ik een check of het wel een geldige datum is (31 feb mag natuurlijk niet) en dan pas gaat hij de db in, in het formaat YYYY-MM-DD. Als je hem namelijk in het goede formaat in je db hebt, kun je hem er op alle mogelijke manieren uit laten rollen.
Bedankt voor je reactie!
Ik neem aan dat je de waarden uit de drie selectboxen vervolgens opslaat in in 1 veld in de db. Heb je hier een paar coderegels voor en eventueel daarna een regel voor het omzetten van de notatie.
Ik zal even kijken, momentje
http://www.phphulp.nl/php/scripts/1/483/
EDIT::
Jan heeft er al een url van gemaakt :P
Gewijzigd op 03/01/2006 12:01:00 door Robert Deiman
Je was me net voor.. wou het zelf ook al ff doen :) Maar goed, zo kan het ook..
@ Marco
Hieronder een stukje voor het maken van die 3 selectieboxen :)
<select name="dag" id="dag">
<option value="DAG"></option>
<option value=""></option>
</select>
<select name="maand" id="maand">
<option value="MAAND"></option>
<option value=""></option>
</select>
<select name="jaar" id="naam">
<option value="JAAR"></option>
Code (php)
<option value=""></option>
op die plekken moet er nog een puntkomma achter.
@ Robert: Jan:
@ Robert: op die plekken moet er nog een puntkomma achter.
Weet je het zeker? Bij mij werkt het namelijk prima zo.. Of is dat weer voor de XHTML controle?
Een datum als 2-1-2006, kun je met explode() eenvoudig in een array zetten. Vervolgens zet je de verschillende delen in de gewenste volgorde en klaar is kees.
1 tekstveld invullen gaat een stuk sneller dan 3x een waarde in een dropdownlistje selecteren. Je hoeft het maar 1x te programmeren, maar het wordt tig-keer gebruikt. Gebruikersvriendelijkheid mag je niet uit het oog verliezen.
de mooiste manier is natuurlijk met een javascript kalender
En met dropdowns kan je ze ook een beetje helpen, zet ze op de dag van vandaag, en ze hoeven (als je er de juiste bedoeling mee hebt) alleen de dag te veranderen.
Willem-Jan:
Maar hoe weet jij hoe ze het invullen?
Het is gebruikelijk om tekstueel aan te geven dat men het formaat dd-mm-yyyy moet gebruiken. Maar ook een punt of slash kun je prima als input accepteren. De rest keur je heel simpel af. Een gebruiker heeft dat, met de juiste foutmelding, na 1x al door.
Heb jij wel eens honderd keer achterelkaar een datum met dropdownlistjes ingevuld? Gek word je er van! Wanneer ik met dit voorstel bij een back-office aankom, ben ik mijn leven niet meer zeker. Met een tekstveld klop je de hele zooi er in no-time in.
En in combinatie met een javascript-kalendertje, krijgt zelfs de grootste sukkel nog een correcte datum in het systeem. Dan wordt het probleem van verschillende datumnotaties ook een stuk kleiner. Dit kan van belang zijn wanneer je een internationale website beheert.
Jan:
Hoi Marco,
mensen een datum met de hand laten invullen is vragen om moeilijkheden. Ik gebruik altijd drie selectboxen. Daarna doe ik een check of het wel een geldige datum is (31 feb mag natuurlijk niet) en dan pas gaat hij de db in, in het formaat YYYY-MM-DD. Als je hem namelijk in het goede formaat in je db hebt, kun je hem er op alle mogelijke manieren uit laten rollen.
mensen een datum met de hand laten invullen is vragen om moeilijkheden. Ik gebruik altijd drie selectboxen. Daarna doe ik een check of het wel een geldige datum is (31 feb mag natuurlijk niet) en dan pas gaat hij de db in, in het formaat YYYY-MM-DD. Als je hem namelijk in het goede formaat in je db hebt, kun je hem er op alle mogelijke manieren uit laten rollen.
je kunt de datum checken met een reguliere expressie of deze aan het formaat voldoet.
Johan
Als het goed is doe je dat niet honderd keer.. Vaak worden dat soort velden gebruikt om een geboortedatum aan te geven, die je dus alleen bij de aanmelding hoeft in te vullen. :)
Vervolgens hoe gaat de omkering vanuit de database (YYYY-MM-DD waarschijnlijk) naar een DD-MM-JJJJ notatie.
Edit: Vanuit je database kun je de functie DATE_FORMAT() gebruiken.
Edit 2:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$query = "
SELECT DATE_FORMAT(datum, '%d-%m-%Y')
AS datumNL
FROM
tabelnaam
ORDER BY
datum
";
?>
$query = "
SELECT DATE_FORMAT(datum, '%d-%m-%Y')
AS datumNL
FROM
tabelnaam
ORDER BY
datum
";
?>
Je gebruik AS datumNL omdat je anders weer hetzelfde sorteerprobleem krijgt. Nu kun je nog steeds sorteren op de originele datum.
Zie ook de handleiding[/URL].
Gewijzigd op 03/01/2006 13:13:00 door Frank -
Johan:
je kunt de datum checken met een reguliere expressie of deze aan het formaat voldoet.
Johan
Johan
Dat wil ik wel eens zien! Geef eens een voorbeeld van een regex die kijkt of 29 feb 1900 een geldige datum is?
We gaan er van uit dat de datum zo ingevoerd wordt:
29-02-1900
daar ben ik ook wel benieuwd naar :P
Jan:
Dat wil ik wel eens zien! Geef eens een voorbeeld van een regex die kijkt of 29 feb 1900 een geldige datum is?
We gaan er van uit dat de datum zo ingevoerd wordt:
29-02-1900
Johan:
je kunt de datum checken met een reguliere expressie of deze aan het formaat voldoet.
Johan
Johan
Dat wil ik wel eens zien! Geef eens een voorbeeld van een regex die kijkt of 29 feb 1900 een geldige datum is?
We gaan er van uit dat de datum zo ingevoerd wordt:
29-02-1900
Jan, Johan heeft het alleen over het formaat. Niet over de inhoud. Daar heb je nog steeds de functie checkdate() voor nodig, die ook in jouw artikel wordt aangeroepen.