验证时间是未来的时间
Validate time is future time
我想验证我的表单,使输入的时间和日期不是过去的。
我目前有两个输入框,一个用于时间,一个用于日期。它们目前都是使用ng-pattern
进行验证的。当这两个输入框都创建了过去的日期时,我如何显示错误(ng-invalid
) ?
注意:我可以做实际的过去与未来的计算(使用momentjs),这是这些输入框的合并,我不知道如何做。据我所知,directive
只能在一个元素上工作,而不是两个?
<input type="text" ng-model="startTime" ng-pattern="/^(?:'d|[01]'d|2[0-3]):[0-5]'d$/">
<input type="text" ng-model="startDate" ng-pattern="/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/">
看一下作用域。$watch,当其中一个值改变时,您可以使用它在控制器中验证两个元素。
看看如何使用不同的输入类型,如datetime。这将把startTime和startDate合并为1 startDateTime。然后,您将根据设置最大值和最小值的方式获得过去或未来的验证。
https://docs.angularjs.org/api/ng/input/input%5Bdatetime-local%5D<input type="datetime-local" id="exampleInput" name="input" ng-model="startDateTime"
placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
这就是我最终想出的,它与模型紧密相连,这不是很好,但它有效。
m.directive("futureDate", function () {
return {
require: "ngModel",
scope: false,
link: function (scope, element, attrs, ngModel) {
ngModel.$validators.futureDate = function (modelValue) {
var time = attrs["futureDate"] == "time" ? modelValue : scope.startTime;
var date = attrs["futureDate"] == "date" ? modelValue : scope.startDate;
var datetime = moment(date + "T" + time);
return datetime > moment();
}
}
}
});
用法:
<input type="text" ng-model="startTime" data-em-future-date="time">
<input type="text" ng-model="startDate" data-em-future-date="date">
相关文章:
- Java脚本时间添加
- Json数据包含日期和时间格式
- 如何根据时间运行不同的脚本
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 在wordpress一定时间后更改自定义字段
- 更改angularjs中的日期-时间格式
- 将当前时间添加到我的页面上的特定部分
- 门户网站:当地时间有多有用
- 显示时间的脚本
- 如何在窗体打开时从javascript倒计时计时器值中节省时间
- 通过JSON&比较时间
- 钛合金未来的日子和时间倒计时
- 使用 JavaScript Date 对象处理未来和过去的日期和时间
- Javascript为未来日期添加时间
- 如何从datetimepicker js中禁用未来的日期和时间
- 在javascript中计算现在和未来时间之间的时间差
- 皮卡估计未来时间优步API
- 验证时间是未来的时间
- 使用谷歌地图API来估计未来的旅行持续时间
- 如何用数学计算显示未来的日期和时间