Kyle
Kyle

Reputation: 164

Check date format before changing it with PHP

I am looking for a way to check a date format before changing the format. My system allows users to upload spreadsheets of data, and one of this fields is date of birth.

This biggest issue I have run into this so far is mm/dd/yy vs mm/dd/yyyy. I have found an example of fixing this on PHP convert 2 digit year to a 4 digit year however I don't always want to do this.

Is there a way I can check the PHP Date format in an If statement? I don't want to rely on counting as 1/1/1973 is the same amount of digits as 01/01/73, but the year issue would get messed up still.

Anyone have any ideas on how I can check dateformat before manipulating it.

Upvotes: 3

Views: 1282

Answers (2)

mjohns
mjohns

Reputation: 369

Try using the DateTime class. The default constructor can interpret your date strings. This should void your need for conditional checks.

$date1 = "1/1/1973";
$date2 = "01/01/73";

$dt1 = new DateTime($date1);
$dt2 = new DateTime($date2);

echo $dt1->format("m/d/Y");     // prints as 01/01/1973
echo $dt2->format("m/d/Y");     // prints as 01/01/1973

EDIT

For two digit years below 1970, you can try this, but it will work if and only if your current and future data is entered as four digit years. Otherwise people born between 2003 and 2069 will have their birthdays converted to 19xx.

Note: We're using 2003 because the OP indicated that all new entries will be forced to four digit years, and (at the time of posting) no one under 13 will be using the software.

$format = "Y";

if(!is_numeric(substr($date, -4)))      // Checks for 2 digit year
{
    $yy = substr($date, -2);            // Gets 2 digit year
    $format = "y";

    if($yy < 70 && $yy > 2)             // Looking for 1903 to 1969 
    {
        $yy += 1900;

        // Rebuild the date string with 4 digit year
        $date = substr($date, 0, strlen($date) - 2) . $yy;
        $format = "Y";
    }
}

$delimiters = array("/", "-", ".");     // Different date delimiters to check

foreach($delimiters as $delim)
{
    if(strpos($date, $delim) !== false)
    {
        $dt = DateTime::createFromFormat("m" . $delim . "d" . $delim . $format, $date);
    }
}

echo $dt->format("m/d/Y");

Upvotes: 2

Ashvin Monpara
Ashvin Monpara

Reputation: 282

Is it then possible for me to include this code in my SQL insert command? '$date = '01/24/2006'; $date = date('Y-m-d', strtotime($date)); $sql = "INSERT INTO table SET date = '$date'";

Upvotes: 0

Related Questions