我在代码中使用strtotime()来分隔日期时遇到问题。当我使用“/”时,格式变为mm-dd-yyyy,当我使用“ - ”格式时,格式变为dd-mm-yyyy。当用户输入日期时,我试图使用“/”和“ - ”
我用preg_macth来验证用户给出的天气 - 或/
非常感谢能够帮助我的人。
我的代码如下:
<?php
$date1=$_GET["q1"];
$date2= $_GET["q2"];
// To check date format for From date
function checkDateFormat1($date1)
{
//match the format of the date
if( (preg_match(" /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/", $date1,$parts)) || (preg_match(" /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/", $date1,$parts)) )
{
//check weather the date is valid of not
//if(checkdate($parts[2],$parts[3],$parts[1]))
if(checkdate($parts[2],$parts[1],$parts[3]))
return true;
else
return false;
}
else
return false;
}
// To check the format for To date
function checkDateFormat2($date2)
{
if((preg_match(" /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/", $date2,$parts))||(preg_match(" /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/", $date2,$parts)))
{
//check weather the date is valid of not
//if(checkdate($parts[2],$parts[3],$parts[1]))
if(checkdate($parts[2],$parts[1],$parts[3]))
return true;
else
return false;
}
else
return false;
}
if ((checkDateFormat2($date2) && checkDateFormat1($date1))==1)
{
if ($date1==$date2)
{
$days="1";
echo $days;
exit;
}
else
{
$difference =(strtotime($date2) - strtotime($date1));
//calculate the number of days
$days = round(((($difference/60)/60)/24), 0);
}
}
else
{
echo "Invalid Date Format"."<br>";
echo "Please make sure that your for date format is MM-DD-YYYY";
exit;
}
if ($days<0)
{
echo "From date cannot be greater than to date";
}
else
{
$days++;
echo $days;
}
?>
答案 0 :(得分:11)
它的工作方式与strToTime()完全相同。从php手册:
注意:强>
m / d / y 或 dmy 格式的日期通过查看之间的分隔符来消除歧义各种组件:如果分隔符是斜杠(/),则假定为美国 m / d / y ;而如果分隔符是短划线( - )或点(。),则假定为欧洲 d-m-y 格式。
为避免潜在的歧义,最好尽可能使用ISO 8601( YYYY-MM-DD )日期或DateTime :: createFromFormat()。
答案 1 :(得分:3)
strtotime()
才能识别。如果您的日期不是标准格式,请使用DateTime::createFromFormat:
$d = DateTime::createFromFormat('d . Y - m', '15 . 2002 - 03');
echo $d->format('Y-m-d');
答案 2 :(得分:1)
尝试使用PHP的$date = DateTime::createFromFormat('Y-m-d',$YourDateString);