> I am having some problem with date validation
> I am trying to validate the date in a form Field
> I had provided a text field for date, so have to
> expect all the different possible entry,
> When i tried with checkdate() method it needs the
> parametes in (int month,int date, int year). It make
> the code more complex , What i am looking is some
> thing similar to is_int(), like the one we have in VB
> isdate()
>   thanks in advance

There's nothing like that, you have to create it yourself. I personally hate
the three drop down method that someone else suggested, but that's just me.

I prefer to have a text box like you, but tell the user what the accepted
format is. You can then write a simple function to parse their answer and
make sure it's correct. You can also use that function to convert it to a
Unix timestamp or MySQL timestamp.

I prefer to accept my dates in the military format of DDMMMYYYY or DDMMMYY
(17NOV75 or 17NOV1975).

I use this function to validate the input:

    //check that date matches 17nov75 or 17nov1975 format.
    //if it does, returned as mysql format date yyyymmdd
    function date($input,$label,$format)
    {
        $retval = false;

        //defaults
        $month_array =
array("jan"=>"01","feb"=>"02","mar"=>"03","apr"=>"04","may"=>"05","jun"=>"06
","jul"=>"07","aug"=>"08","sep"=>"09","oct"=>"10","nov"=>"11","dec"=>"12");
        $days_in_month = array(31,28,31,30,31,30,31,31,30,31,30,31);

        //verify date matches 17nov75 or 17nov1975 format

if(eregi("^([0-9]{1,2})-?(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-?
((19|20)?[0-9]{2})$",$input,$regs))
        {
            //convert month to number
            $regs[2] = strtolower($regs[2]);
            $month = $month_array[$regs[2]];

            //make days two digits if it's not already
            $day = $regs[1];
            if($day < 10 && strlen($day) == 1) { $day = "0" . $day; }
            if($regs[3] < 100)
            {
                //account for 2 digit year
                //< 30 = 20xx
                //> 30 = 19xx
                if($regs[3] < 30) { $year = "20" . $regs[3]; }
                else { $year = "19" . $regs[3]; }
            }
            else { $year = $regs[3]; }

            //verify day does not exceed days in month
            if(($day <= $days_in_month[$month-1] && $day > 0) || ($day==29
&& $month==2 && $year%4==0))
            {
                $retval = $year.$month.$day;
            }
            else
            {
                $this->error[] = $label . ": date has invalid day";
            }
        }
        else
        {
            $this->error[] = $label . ": date does not match format of
17NOV75 or 17NOV1975";
        }

        return $retval;
    }


---John Holmes...


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to