我已经将一个变量转换为unix时间戳,以检查它是否是有效日期。格式为年月日。我的代码低于
<?php
$date1='24/11/2013';
$date2='09/11/2013';
$date3='yuyuy1909090';//CAN BE ANYTHING
if(strtotime($date1)>0){
echo "valid date1";
}
if(strtotime($date2)>0){
echo "valid date2";
}
if(strtotime($date3)>0){
echo "valid date2";
}
?>
但如果说只有$date2
是有效的,我不能更改日期的格式,因为它来自第三方平面文件。。。
可能是什么问题?
如果您知道有效的格式,您可以使用:
$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
echo 'valid date1';
}
因为strtotime认为24/11/2013
是美国格式,因为带斜线的日期被解释为m/d/y
,并且没有第24个月的第11个月,所以它失败了。
如果你做
strtotime('11/24/2013');
相反,它会起作用。
如果你想让你的日期保持这种格式,并且仍然使用strtotime,你可以做
strtotime(str_replace('/', '-', '24/11/2013'));
因为带连字符的日期被解释为d-m-y
格式
当日期为$date1='yuyuy1909090'
时,则为
$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
echo 'valid date1';
}
在这种情况下,它会给出错误,所以最好为regex验证多添加一行
if(preg_match("/^'d{1,2}'/'d{1,2}'/'d{4}/",$date1){
$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
echo 'valid date1';
}
}