代码之家  ›  专栏  ›  技术社区  ›  BourneShady

在laravel 4.2验证中允许相同的开始和结束日期

  •  0
  • BourneShady  · 技术社区  · 8 年前

    所以我有这个函数,用户需要输入某个事件的开始日期和结束日期。因此,我所做的是在视图中添加了一个日期选择器,在控制器中,我唯一能做的就是允许结束日期晚于开始日期。但我也应该允许相同的开始日期和结束日期,比如说用户今天选择了开始日期,我也应该可以允许结束日期是今天。基本上,结束日期可以是在开始日期之后,这里是控制器中的验证代码。

    $rules = array(
            'eventName'    => 'required',
            'users'        => 'required',
            'evStart'      => 'required',
            'evEnd'        => 'required|after:evStart',
        );
    

    这是我的视图代码

    <div class="input-field col s10 offset-s1" style="margin-top:40px;">
        {{ Form::label('date', 'Event Start *') }}
        {{ Form::input('date', 'evStart', Input::old('evStart'), ['class'=>'datepicker',   'placeholder' => 'Date']) }}
    </div>
    
    <div class="input-field col s10 offset-s1">
        {{ Form::label('date', 'Event End *') }}
        {{ Form::input('date', 'evEnd', Input::old('evEnd'), ['class'=>'datepicker', 'placeholder' => 'Date']) }}
    </div>
    

    关于如何改进我的代码,有什么想法吗?提前非常感谢!

    2 回复  |  直到 8 年前
        1
  •  1
  •   Adiasz    8 年前

    为日期制定自己的验证规则:

    Validator::extend('after_equal', function($attribute, $value, $parameters, $validator)
    {
        return strtotime($validator->getData()['evStart']) <= strtotime($value);
    });
    

    开始日期:

    Validator::extend('before_equal', function($attribute, $value, $parameters, $validator)
    {
        return strtotime($validator->getData()['evEnd']) >= strtotime($value);
    });
    

    把这个代码放在你想要的地方。如果要验证空字段,请使用Validator::extendImplicit。

        2
  •  1
  •   Borna    8 年前
    <script type="text/javascript">
         $( function() {
    
    
        //----------date format-----------------
    
        $("#startdate").datepicker({
                dateFormat: "mm/dd/yy",
    
                onSelect: function (date) {
                    var date2 = $('#startdate').datepicker('getDate');
                    date2.setDate(date2.getDate());
    
                    $('#enddate').datepicker('option', 'minDate', date2);
                }
            });
            $('#enddate').datepicker({
                dateFormat: "mm/dd/yy",
                onClose: function () {
                    var dt1 = $('#startdate').datepicker('getDate');
                    console.log(dt1);
                    var dt2 = $('#enddate').datepicker('getDate');
                    if (dt2 <= dt1) {
                        var minDate = $('#enddate').datepicker('option', 'minDate');
                        $('#enddate').datepicker('setDate', minDate);
                    }
                }
            });
      } );
    </script>