我正在寻找一种在更改格式之前检查日期格式的方法。我的系统允许用户上传数据电子表格,其中一个字段是出生日期。
到目前为止,我遇到的最大问题是mm/dd/yy
vs mm/dd/yyyy
。我找到了一个在PHP convert 2 digit year to a 4 digit year修复此问题的示例,但我并不总是想这样做。
有没有办法可以在If语句中检查PHP
日期格式?我不想依赖于计数,因为1/1/1973
与01/01/73
的位数相同,但是年份问题会变得混乱。
任何人对如何在操作之前检查dateformat有任何想法。
答案 0 :(得分:2)
尝试使用DateTime class。 default 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'";