[英]Check date format before changing it with PHP
我正在寻找一种在更改格式之前检查日期格式的方法。 我的系统允许用户上传数据电子表格,其中一个字段是出生日期。
到目前为止,我遇到的最大问题是mm/dd/yy
vs mm/dd/yyyy
。 我已经找到了一个在PHP转换2位数年到4位数年固定这个的例子,但我并不总是想这样做。
有没有办法可以在If语句中检查PHP
日期格式? 我不想依靠计数为1/1/1973
是同样数额的数字01/01/73
,但今年的问题会得到还是搞砸了。
任何人对如何在操作之前检查dateformat有任何想法。
尝试使用DateTime类 。 默认构造函数可以解释您的日期字符串。 这应该使您无需进行条件检查。
$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");
那么我可以在我的SQL插入命令中包含此代码吗? '$date = '01/24/2006'; $date = date('Ym-d', strtotime($date)); $sql = "INSERT INTO table SET date = '$date'";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.