2

PHP 関数を少し変更してdate()、英国の 6 桁の dd/mm/yy または dd-mm-yy 形式を認識できるようにしようと考えています。当然のことながら、この形式の日付は代わりに国際 (yy-mm-dd) 形式であると見なされます。

これにより他の形式を認識できるようになるため、日付関数に渡したいと思っていますが、私は英国に拠点を置いているため、英国の形式で入力する可能性が最も高いです。

何か案は?この問題の解決には正規表現が関与していると思われます...

更新 - 私の解決策

以下の回答の一部を使用して、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];
}
4

2 に答える 2

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;
    }

strtotime からの引用:

区切り文字がスラッシュ (/) の場合、アメリカの m/d/y が想定されます。一方、セパレータがダッシュ (-) またはドット (.) の場合は、ヨーロッパの dmy 形式が想定されます。

于 2012-10-17T10:24:04.750 に答える