note 89773 added to function.checkdate
| From: | JamesLuckhurst at osu1 dot php dot net | Date: | Mon, 23 Mar 2009 00:26:44 +0000 |
| Subject: | note 89773 added to function.checkdate | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-152310@lists.php.net to get a copy of this message | ||
<?php
/*
## converts a given date format to another date format returns date if the checked date given is
valid; otherwise returns NULL
## $s_date the date in e.g. dd/mm/yyyy
## $s_from, $s_to date formats from to i.e.
convertdate('13/04/2009','eng','iso','-'); output:
2009-04-13
## date formats available
## 'eng' = dd/mm/yyyy
## 'usa' = mm/dd/yyyy
## 'iso' = yyyy/mm/dd
## $s_return_delimiter returned delimiter e.g. '-' would return dd-mm-yyyy
*/
function convertdate($s_date,$s_from,$s_to,$s_return_delimiter) {
$s_return_date = '';
$s_from = strtolower($s_from);
$s_to = strtolower($s_to);
$s_date = str_replace(array('\'', '-', '.', ',',
' '), '/', $s_date);
$a_date = explode('/', $s_date);
switch($s_from) {
case 'eng': # dd/mm/yyyy
$day = $a_date[0];
$month = $a_date[1];
$year = $a_date[2];
break;
case 'usa': # mm/dd/yyyy
$month = $a_date[0];
$day = $a_date[1];
$year = $a_date[2];
break;
case 'iso': # yyyy/mm/dd
$year = $a_date[0];
$month = $a_date[1];
$day = $a_date[2];
break;
default: # error message
user_error('function convertdate(string $s_date, string $s_from, string $s_to, string
$s_return_delimiter) $s_from not a valid type of \'eng\', \'usa\' or
\'iso\'');
return NULL;
}
# substitution fixes of valid alternative human input e.g. 1/12/08
if (strlen($day)==1) { $day='0'.$day; } # day -trailing zero missing
if (strlen($month)==1) { $month='0'.$month; } # month -trailing zero missing
if (strlen($year)==3) { $year=substr(date('Y'),0,strlen(date('Y'))-3).$year; }
# year -millennium missing
if (strlen($year)==2) { $year=substr(date('Y'),0,strlen(date('Y'))-2).$year; }
# year -century missing
if (strlen($year)==1) { $year=substr(date('Y'),0,strlen(date('Y'))-1).$year; }
# year -decade missing
switch($s_to) {
case 'eng': # dd/mm/yyyy
$s_return_date = $day.$s_return_delimiter.$month.$s_return_delimiter.$year;
break;
case 'usa': # mm/dd/yyyy
$s_return_date = $month.$s_return_delimiter.$day.$s_return_delimiter.$year;
break;
case "iso": # yyyy/mm/dd
$s_return_date = $year.$s_return_delimiter.$month.$s_return_delimiter.$day;
break;
default: # error message
user_error('function convertdate(string $s_date, string $s_from, string $s_to, string
$s_return_delimiter) $s_to not a valid type of \'eng\', \'usa\' or
\'iso\'');
return NULL;
}
# if it's an invalid calendar date e.g. 40/02/2009 or rt/we/garbage
if (!is_numeric($month) || !is_numeric($day) || !is_numeric($year)) {
return NULL;
} elseif (!checkdate($month, $day, $year)) {
return NULL;
}
return $s_return_date;
}
echo convertdate('13/04/2009','eng','iso','-');
?>
----
Server IP: 203.89.181.186
Probable Submitter: 202.180.89.170
----
Manual Page -- http://www.php.net/manual/en/function.checkdate.php
Edit -- https://master.php.net/note/edit/89773
Del: integrated -- https://master.php.net/note/delete/89773/integrated
Del: useless -- https://master.php.net/note/delete/89773/useless
Del: bad code -- https://master.php.net/note/delete/89773/bad+code
Del: spam -- https://master.php.net/note/delete/89773/spam
Del: non-english -- https://master.php.net/note/delete/89773/non-english
Del: in docs -- https://master.php.net/note/delete/89773/in+docs
Del: other reasons-- https://master.php.net/note/delete/89773
Reject -- https://master.php.net/note/reject/89773
Search -- https://master.php.net/manage/user-notes.php