在使用PHP更改之前检查日期格式

时间:2015-06-24 14:23:17

标签: php date

我正在寻找一种在更改格式之前检查日期格式的方法。我的系统允许用户上传数据电子表格,其中一个字段是出生日期。

到目前为止,我遇到的最大问题是mm/dd/yy vs mm/dd/yyyy。我找到了一个在PHP convert 2 digit year to a 4 digit year修复此问题的示例,但我并不总是想这样做。

有没有办法可以在If语句中检查PHP日期格式?我不想依赖于计数,因为1/1/197301/01/73的位数相同,但是年份问题会变得混乱。

任何人对如何在操作之前检查dateformat有任何想法。

2 个答案:

答案 0 :(得分:2)

尝试使用DateTime classdefault constructor可以解释您的日期字符串。这应该会使您无条件检查。

$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

修改

对于1970年以下的两位数年份,您可以尝试这一点,但是当当前<或强>您当前和未来的数据输入为四位数年份时,它将有效。否则,2003年到2069年之间出生的人将把他们的生日转换为19xx。

注意: 我们正在使用2003,因为OP表示所有新条目将被强制为四位数年份,并且(在发布时)13岁以下的人不会使用该软件。

$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");

答案 1 :(得分:0)

那么我可以在SQL插入命令中包含此代码吗?     '$date = '01/24/2006'; $date = date('Y-m-d', strtotime($date)); $sql = "INSERT INTO table SET date = '$date'";