如何正确验证特定格式的日期?

How to properly validate date to a specific format?

我需要验证我的字段的日期格式,因为我的数据库只访问这种 (Y-m-d) 格式。

因此,我需要能够将任何其他日期格式转换为这种格式。 我遇到的一个问题是,根据我使用的浏览器,我在输入日期字段中使用的日期格式会发生变化。例如当前的 firefox 浏览器日期格式是 mm/dd/yyyy 但我需要它来更改为 (Y-m-d).

我的表格

 <div class="form-group">
    <label for="DateField">Age: </label>
       <input type="date" class="form-control" id='DateField' name="date" placeholder="DD-MM-YYYY" size="10" minlength="6" maxlength="10" required/>
 </div>

我希望能够转换任何这些格式 (Y/m/d, d/m/Y, m/d/Y, d-m-Y, m-d-Y, Y.m.d, d.m.Y, m.d.Y) 到 (Y-m-d)

$format = "d-m-Y";
        $date = DateTime::createFromFormat($format, $_POST['DateField'])->format('Y-m-d'); //here getting error msg

        $date_errors = DateTime::getLastErrors();
        if($date_errors['warning_count'] + $date_errors['error_count'] > 0) {
         // createFromFormat returns false if the format is invalid;
            echo 'Date format is incorrect e.g Y-m-d';
            exit();
        }

我解决它的一种方法是使用 jquery 日期选择器 但它在 firefox 57 中不起作用继续...(是的,我尝试将输入字段 type="date" 更改为 type="text" 但仍然不起作用...

<script type="text/javascript">
    var datefield = document.createElement("input");
    datefield.setAttribute("type", "date");
    if (datefield.type !== "date"){ //if browser doesn't support input type="date", load files for jQuery UI Date Picker
        document.write('<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/dot-luv/jquery-ui.css " rel="stylesheet" type="text/css" />\n');
        document.write('<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"><\/script>');

    }

</script>

<script>
    $(function(){
        if (!Modernizr.inputtypes.date) { //if browser doesn't support input type="date", initialize date picker widget:
        // If not native HTML5 support, fallback to jQuery datePicker

            $('input[type=date]').datepicker({
                // Consistent format with the HTML5 picker
                    dateFormat : 'dd-mm-yy',
                    maxDate: 0
                },
                // Localization
                $.datepicker.regional['it']

            );
        }
    });
</script>

错误消息:调用布尔值的成员函数 format() 为什么 jquery 日期选择器在 firefox 57

中不工作

您可以为此使用 strtotimehttp://php.net/manual/en/function.strtotime.php

$date = date('Y-m-d', strtotime($_POST['DateField']));

试试这个

function validateDate($date, $format = 'Y-m-d'){
    $v = DateTime::createFromFormat($format, $date);
    return $v && $v->format($format) == $date;
}
var_dump(validateDate('2000-02-20', 'Y-m-d')); //true
var_dump(validateDate('20-02-2000', 'Y-m-d')); //false