Scripts
MiniScript: Datums checken
Hallo allemaal. Aangezien MySQL geen ingebouwde check heeft voor geldigheid van datums moet je die zelf checken voordat je ze in de database zet. Nu is daar wel een PHP functie voor, checkdate (), maar die vond ik nogal onhandig en beperkt. Checkdate verwacht drie integers in de volgorde maand - dag - jaar. Als je een datumwaarde uit een textfield uit een form krijgt is dat vaak in Nederlandse notatie (dag - maand - jaar). Ik heb een kort scriptje gemaakt, dat zeker niet volledig is, maar mijns inziens wel een leuke uitbreiding op de beperkingen van checkdate ().
miniscript-datums-checken
[b]MiniScript:[/b]
<?php
function my_checkdate ($date, $month = false, $year = false) {
// als voor date, month en year cijfers zijn ingevuld
if (is_int ($date) && is_int ($month) && is_int ($year)) {
return checkdate ($month, $date, $year);
}
if (is_array ($date)) {
if (count ($date) != 3) {
return false;
}
else {
return checkdate ($date[1], $date[0], $date[2]);
}
}
if (is_string ($date)) {
echo $date;
$array = spliti ('[-\/\ ]', $date);
return checkdate ($array[1], $array[0], $array[2]);
}
}
?>
[b]Werking:[/b]
je kunt my_checkdate op drie manieren aanroepen:
1) met drie integer-argumenten in de volgorde dag - maand - jaar
<?php
$datum = 11;
$maand = 5;
$jaar = 1982;
if (my_checkdate ($datum, $maand, $jaar)) {
echo '<p>okee</p>';
}
?>
2) met één array-argument. De array moet drie elementen hebben in de volgorde dag - maand - jaar
<?php
$datum = array (11,5,1982);
if (my_checkdate ($datum)) {
echo '<p>okee</p>';
}
?>
3) met een tekststring in één van de volgende formats: dd/mm/yyyy, dd-mm-yyyy, of dd mm yyyy
(dus gescheiden door respectievelijk een slash, een min-teken, of een spatie)
<?php
$datum = '11/05/1982';
if (my_checkdate ($datum)) {
echo '<p>okee</p>';
}
$datum = '11-05-1982';
if (my_checkdate ($datum)) {
echo '<p>okee</p>';
}
$datum = '11 05 1982';
if (my_checkdate ($datum)) {
echo '<p>okee</p>';
}
?>
Voor dagen en maanden kun/mag je voorloop-nullen weglaten, dus bijvoorbeeld 11/5/1982 zal ook werken. Hopelijk hebben jullie er wat aan en als er vragen/opmerkingen zijn, post ze dan hieronder.
groeten, Jan
p.s. Je kunt ook checken of iets een schrikkeljaar is, met bv:
<?php
$schrikkeljaar = my_datecheck ('29-02-1984');
?>
Reacties
0