我目前正在设置一个带有Parsley <input type=date>
字段的表单,以验证日期不能过去。但是,尽管给出了正确的值(将来),但我无法验证它。它似乎从min字段读取最小值,但我尝试更改格式(例如Y / m / d),但错误仍然会弹出。我能否知道这背后的问题是什么?它的解决方法是什么?提前谢谢。
错误是This value should be greater than or equal to 10/21/2014.
,即使我迟到了。
<input type="date" name="contact-date" id="contact-date" placeholder="MM/DD/YYYY" data-date-format="mm/dd/yyyy" min="<?php echo date('m/d/Y'); ?>" parsley-type="dateIso">
我查看了K D的回答并意识到正则表达式是针对DD / MM / YYYY所以我从
更改了它 /^([12]\d|0[1-9]|3[01])\D?(0[1-9]|1[0-2])\D?(\d{4})$/
到
/^(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])\D?(\d{4})$/
尽管指定了最小值,但不知何故,这个更改为传递的任何日期都是有效日期。
现在代码:
<input type="date" class="contact-input" name="contact-date" id="contact-date" placeholder="MM/DD/YYYY" data-type="dateIso" data-parsley-min="<?php echo date('m/d/Y'); ?>">
答案 0 :(得分:8)
parsley-type="dateIso"
告诉我您使用的是不推荐使用的Parsley v1.*。 data-date-format="mm/dd/yyyy"
告诉我您正在使用Bootstrap Datetimepicker。
我建议您使用Parsley 2.x(即使您需要为最小日期制作验证器)并使用Datetimepicker的属性data-date-minDate
。
对于此解决方案,您需要以下代码(working jsfiddle):
<div class='input-group date' id='datetimepicker'>
<input type='text' name="contact-date" id="contact-date"
placeholder="MM/DD/YYYY"
data-date-format="MM/DD/YYYY"
data-date-minDate="<?php echo date('m/d/Y'); ?>"
data-parsley-mindate="<?php echo date('m/d/Y'); ?>" />
<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
<script>
window.ParsleyValidator
.addValidator('mindate', function (value, requirement) {
// is valid date?
var timestamp = Date.parse(value),
minTs = Date.parse(requirement);
return isNaN(timestamp) ? false : timestamp > minTs;
}, 32)
.addMessage('en', 'mindate', 'This date should be greater than %s');
$('#myForm').parsley();
$('#datetimepicker').datetimepicker({
language:'en'
});
</script>
注意:
data-date-format
应为MM/DD/YYYY
(大写,请检查momentjs docs); parsley-type="dateIso"
替换为data-parsley-mindate="<?php echo date('m/d/Y'); ?>" />
,以便执行自定义验证程序