加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – is_date()发生故障

发布时间:2020-12-13 17:57:27 所属栏目:PHP教程 来源:网络整理
导读:我有一个 PHP方法检查是否 传入参数是一个日期.这是它: public function is_Date($str){ if (is_numeric($str) || preg_match('^[0-9]^',$str)){ $stamp = strtotime($str); $month = date( 'm',$stamp ); $day = date( 'd',$stamp ); $year = date( 'Y',$s
我有一个 PHP方法检查是否
传入参数是一个日期.这是它:
public function is_Date($str){ 
        if (is_numeric($str) ||  preg_match('^[0-9]^',$str)){  
            $stamp = strtotime($str);
            $month = date( 'm',$stamp ); 
            $day   = date( 'd',$stamp ); 
            $year  = date( 'Y',$stamp ); 
            return checkdate($month,$day,$year); 
        } 
        return false; 
}

然后,我测试开这样:

$var = "100%";

if(is_Date($var)){
   echo $var.' '.'is a date'; 
} 

$var = "31/03/1970";

if(is_Date($var)){
   echo $var.' '.'is a date'; 
}

$var = "31/03/2005";

if(is_Date($var)){
   echo $var.' '.'is a date'; 
}

$var = "31/03/1985";

if(is_Date($var)){
   echo $var.' '.'is a date'; 
}

请注意,每个ifs还有一个else语句,如:

else{
   echo $var.' '.'is not a date' 
}

OUTPUT:

100% is a Date
31/03/1970 is a Date
31/03/2005 is a Date
31/03/1985 is a Date

我的问题是,为什么100%显示为日期,为什么31/03/1985不被视为日期?

关于为什么的任何线索将受到高度赞赏,因为我不是在Regex的专业知识

你正在使用^在正则表达式字符串的末尾,^的含义是比较字符串的开头.

另外,正如hjpotter92建议的那样,你可以简单地使用is_numeric(strtotime($str))

你的功能应该是这样的:

public function is_Date($str){ 
    $str=str_replace('/','-',$str);  //see explanation below for this replacement
    return is_numeric(strtotime($str)));
}

Documentation says:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/),then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.),then the European d-m-y format is assumed.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读