允许PHP date()函数识别dd-mm-yy格式

Oll*_*lie 2 php regex date

我想稍微修改PHP date()函数,以便它识别英国6位数字格式的dd/mm/yy或dd-mm-yy.可以理解的是,它会认为这种形式的日期是国际(yy-mm-dd)格式.

我仍然希望将它传递给日期函数,因为这将允许它识别其他格式,但由于我在英国,所以人们很可能会将其置于英国格式.

有任何想法吗?我怀疑Regex参与了解决这个问题的方法......

更新 - 我的解决方案

使用下面答案中的部分,这就是我在dd/mm/yy的情况下能够改变它的方式:

$s_date = str_replace('/', '-', $s_date);

preg_match('^(.*)[-](.*)[-](.*)$^', $s_date, $matches);
if ($matches) {
    if (strlen($matches[3]) == 2) {
        $matches[3] = '20'.$matches[3];
    }
    $s_date = $matches[1].'-'.$matches[2].'-'.$matches[3];
}
Run Code Online (Sandbox Code Playgroud)

Lau*_*nce 5

此功能允许您检查dd-mm-yy和dd/mm/yy.

通过使用str替换 - 您可以强制日期始终采用'dd-mm-yy'格式.strtotime使用" - "作为您想要的格式来解释日期.

// Is this a valid date?
    function valid_date($str) 
    {
        $str = str_replace('/', '-', $str);
        if ($arr = strtotime($str))
        {
            $arr = explode("-", date("d-m-Y", strtotime($str)));
            $yyyy = $arr[2];
            $mm = $arr[1];
            $dd = $arr[0];
            if (is_numeric($yyyy) && is_numeric($mm) && is_numeric($dd))
            {
                return checkdate($mm, $dd, $yyyy);
            }
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

来自strtotime的报价:

如果分隔符是斜杠(/),则假定为美国m/d/y; 而如果分隔符是破折号( - )或点(.),则假定为欧洲dmy格式.