我已将一个变量转换为unix时间戳,以确定它是否为有效日期 .Format是dd / mm / yy。我的代码在
之下<?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
有效,我就无法更改日期格式,因为它来自第三方平面文件......
可能是什么问题?
答案 0 :(得分:5)
如果您知道有效格式,可以使用:
$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
echo 'valid date1';
}
答案 1 :(得分:1)
因为strtotime认为24/11/2013
是美国格式,因为带有斜杠的日期被解释为m/d/y
,并且第24个月没有第11个,所以它失败了。
如果你做了
strtotime('11/24/2013');
相反,它会起作用。
如果您想以该格式保留日期并仍使用strtotime,则可以
strtotime(str_replace('/', '-', '24/11/2013'));
带连字符的日期被解释为d-m-y
格式
答案 2 :(得分:0)
当日期为$date1='yuyuy1909090'
时
$date = DateTime::createFromFormat('d/m/Y', $date1);
if ( $date->getTimestamp() > 0 ) {
echo 'valid date1';
}
在这种情况下,它会产生错误,因此最好为正则表达式验证添加一行
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';
}
}