【问题标题】:How to properly validate date to a specific format?如何正确地将日期验证为特定格式?
【发布时间】:2018-01-08 21:21:49
【问题描述】:

我需要验证我的字段的日期格式,因为我的数据库只能访问这种 (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 datepicker,但它在 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 datepicker 在 firefox 57 中不起作用

【问题讨论】:

  • 你考虑过 Moment.js 库吗?它非常简单且非常有用momentjs.com
  • 我如何使用它...我只是把它放在我的php文件中?
  • 您可能想看看浏览器发送到服务器的内容。尽管显示方式不同,但 chrome 确实以 Y-m-d 格式将其发送为输入类型 date
  • 对于 chrome,它的 d-m-Y(13-Jan-20XX) 和 firefox(我正在使用的)它的 mm/dd/yyyy
  • 检查开发工具。并检查 (developers.google.com/web/updates/2012/08/…)

标签: javascript php jquery date date-formatting


【解决方案1】:

试试这个

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

【讨论】:

  • 代码转储不能提供好的答案。你应该解释如何为什么这可以解决他们的问题。我推荐阅读,“How do I write a good answer?"
【解决方案2】:

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

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

【讨论】:

  • 我用 Firefox 打开了jqueryui.com/datepicker,它对我有用
  • 可能与z-index问题有关?
  • if (!Modernizr.inputtypes.date)
  • 难道没有办法让即使浏览器支持input type=date,也让jquery datepicker超越它?
  • 你可以使用type="text"并去掉if条件
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 2018-03-17
  • 1970-01-01
  • 2016-08-11
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多