javascript - 验证时间选择器如何选择最小和最大时间?
问题描述
验证时间选择器如何选择最小和最大时间?
我正在创建一个日历日期单击显示时间输入,然后我必须单击添加按钮以显示动态行时间输入字段,以便我可以添加验证一个日期时间范围的最小和最大时间
var startDateTime = '09:30:20'
var dates = new Array();
var time = new Date();
function add30Min(oldTime) {
// var newDateTime = moment(oldTime, "HH:mm")
// .add(30, 'minutes')
// .format('HH:mm');
return oldTime;
}
function minus30Min(oldTime) {
// var newDateTime = moment(oldTime, "HH:mm")
// .subtract(30, 'minutes')
// .format('HH:mm');
return oldTime;
}
function checkTimeValidation(elm, date) {
}
// when start time change, update minimum for end timepicker
function tpStartSelect(time, endTimePickerInst) {
// $('#timepicker_end').timepicker('option', {
// minTime: {
// hour: endTimePickerInst.hours,
// minute: endTimePickerInst.minutes
// }
// });
}
// when end time change, update maximum for start timepicker
function tpEndSelect(time, startTimePickerInst) {
// $('#timepicker_start').timepicker('option', {
// maxTime: {
// hour: startTimePickerInst.hours,
// minute: startTimePickerInst.minutes
// }
// });
}
var myControl = {
create: function(tp_inst, obj, unit, val, min, max, step) {
$('<input class="ui-timepicker-input" value="' + val + '" style="width:50%">')
.appendTo(obj)
.spinner({
min: min,
max: max,
step: step,
change: function(e, ui) { // key events
// don't call if api was used and not key press
if (e.originalEvent !== undefined)
tp_inst._onTimeChange();
tp_inst._onSelectHandler();
},
spin: function(e, ui) { // spin events
tp_inst.control.value(tp_inst, obj, unit, ui.value);
tp_inst._onTimeChange();
tp_inst._onSelectHandler();
}
});
return obj;
},
options: function(tp_inst, obj, unit, opts, val) {
if (typeof(opts) == 'string' && val !== undefined)
return obj.find('.ui-timepicker-input').spinner(opts, val);
return obj.find('.ui-timepicker-input').spinner(opts);
},
value: function(tp_inst, obj, unit, val) {
if (val !== undefined)
return obj.find('.ui-timepicker-input').spinner('value', val);
return obj.find('.ui-timepicker-input').spinner('value');
}
};
function setDefaultTime(time) {
console.log('Selected Time is:' + time)
}
function setTimePickerDynamic() {
$('.start_event_time_picker').timepicker({
dateFormat: '',
timeFormat: 'HH:mm',
datepicker: false,
controlType: myControl,
ampm: true,
dropdown: true,
onClose: function(dateText, $i) {
var id = $(this).attr('id');
var endTimeId = $('#' + id).parents('.divTime').find('.end_event_time_picker').attr('id');
var startDateTextBox = $('#' + endTimeId);
// if(startDateTextBox.val() != '') {
// var testStartDate = new Date(startDateTextBox.val());
// var testEndDate = new Date(dateText);
// if(testStartDate > testEndDate){
// startDateTextBox.val(add30Min(dateText));
// }
// } else {
// startDateTextBox.val(add30Min(dateText));
// }
},
onSelect: function(dateText, el) {
tpStartSelect();
var id = $(this).attr('id');
var element = $(this),
text;
// get access to this Timepicker instance
var timepicker = element.timepicker();
text = timepicker.format(dateText);
$('#' + id).parents('.divTime').find('.end_event_time_picker').timepicker('option', {
'minTime': text,
'timeFormat': 'HH:mm'
});
setDefaultTime(dateText);
// var this=$(this);
// checkTimeValidation(this, dateText);
},
beforeShow: function(dateText) {
var id = $(this).attr('id');
var split_id = id.split("_");
var firstIndex = parseInt(split_id[3]);
var secondIndex = parseInt(split_id[4]);
var elm = $(this);
// checkTimeValidation(elm, dateText);
},
}).attr('readonly', 'readonly');
$('.end_event_time_picker').timepicker({
dateFormat: '',
timeFormat: 'HH:mm',
datepicker: false,
controlType: myControl,
ampm: true,
onClose: function(dateText, $i) {
var id = $(this).attr('id');
var endTimeId = $('#' + id).parents('.divTime').find('.start_event_time_picker').attr('id');
var startDateTextBox = $('#' + endTimeId);
// if(startDateTextBox.val() != '') {
// var testStartDate = new Date(startDateTextBox.val());
// var testEndDate = new Date(dateText);
// if(testStartDate > testEndDate){
// startDateTextBox.val(minus30Min(dateText));
// }
// } else {
// startDateTextBox.val(minus30Min(dateText));
// }
},
onSelect: function(dateText, el) {
var id = $(this).attr('id');
console.log($('#' + id).parents('.divTime').find('.start_event_time_picker').val());
console.log(dateText);
var timepicker = element.timepicker();
text = timepicker.format(dateText);
$('#' + id).parents('.divTime').find('.start_event_time_picker').timepicker('option', {
'maxTime': text,
'timeFormat': 'HH:mm'
});
},
beforeShow: function(dateText) {
var id = $(this).attr('id');
var split_id = id.split("_");
var firstIndex = parseInt(split_id[3]);
var secondIndex = parseInt(split_id[4]);
}
}).attr('readonly', 'readonly');
}
function addDate(date) {
if ($.inArray(date, dates) < 0) dates.push(date);
}
function removeDate(index, date) {
$(".div" + date).remove();
dates.splice($.inArray(date, dates), 1);
}
function printArray(date) {
var printArr = new String;
var j = 0;
dates.forEach(function(val, i) {
var id = $("#event_dates" + val);
if (id.length == 0) {
++j;
printArr += '<div class="dynamicDivDate mb-4 div' + val + '" id="div_' + (i) + '"><div class="row mt-2 mb-2"><div class="col-md-5"><p>event_dates_times[scheduling_date_' + i + '][date]</p><input class="form-control" id="event_dates' + val + '" type="text" required="required" readonly="readonly" name="event_dates_times[scheduling_date_' + i + '][date]" value=' + val + '></div></div>' + '<div class="dynamicAddRemoveMain divTime row" id="dynamicTime_' + j + '"><div class="col-md-5"><input id="start_event_time_' + (j) + '_' + (j + i) + '" type="text" required class="form-control start_event_time_picker" autocomplete="off" placeholder="Select start Time" name="event_dates_times[scheduling_date_' + i + '][time][scheduling_time_' + (j) + '][start_time]"></div>' + '<div class="col-md-5"><input id="end_event_time_' + (j) + '_' + (j + i) + '" type="text" class="form-control end_event_time_picker" required autocomplete="off" placeholder="Select end Time" name="event_dates_times[scheduling_date_' + i + '][time][scheduling_time_' + (j) + '][end_time]"></div><div class=" col-lg-2 col-md-2 col-sm-2 col-2"><button type="button" name="add" id="add-btn-date" required class="btn_add_mtinput_time"><i class="fas fa-plus"></i></button></div></div></div>';
}
});
$('#show_calender_div').append(printArr);
setTimePickerDynamic();
}
// Adds a date if we don't have it yet, else remove it
function addOrRemoveDate(date) {
var index = $.inArray(date, dates);
if (index >= 0) {
removeDate(index, date);
} else {
addDate(date);
printArray(date);
}
}
// Takes a 1-digit number and inserts a zero before it
function padNumber(number) {
var ret = new String(number);
if (ret.length == 1) ret = "0" + ret;
return ret;
}
$("#mdp-demo").multiDatesPicker({
dateFormat: 'dd-mm-yy',
maxPicks: 5,
minDate: 0,
onSelect: function(dateText) {
addOrRemoveDate(dateText);
},
beforeShowDay: function(date) {
var year = date.getFullYear();
// months and days are inserted into the array in the form, e.g "01/01/2009", but here the format is "1/1/2009"
var month = padNumber(date.getMonth() + 1);
var day = padNumber(date.getDate());
// This depends on the datepicker's date format
var dateString = month + "-" + day + "-" + year;
var gotDate = $.inArray(dateString, dates);
if (gotDate >= 0) {
// Enable date so it can be deselected. Set style to be highlighted
return [true, "ui-state-highlight"];
}
// Dates not in the array are left enabled, but with no extra style
return [true, ""];
}
});
$(document).on('click', '.btn_add_mtinput_time', function() {
// $(".btn_add_mtinput").click(function(e){
var max = 3;
var total = $(this).parents(".dynamicDivDate").children('.divTime').length;
var lastid = $(this).parents(".dynamicDivDate").children(".divTime:last").attr("id");
var checkinput = $(this).parents(".dynamicDivDate").children(".divTime:last");
if (checkinput.find('.start_event_time_picker').val() == '' || checkinput.find('.end_event_time_picker').val() == '') {
// alert('Please select time then add new fields');
// return false;
}
var split_id = lastid.split("_");
var nextindex = Number(split_id[1]) + 1;
// console.log($(this).parents(".dynamicAddRemoveMain").siblings('.divTime').length);
if (total < max) {
var id = $(this).parents(".dynamicAddRemoveMain").parents('.dynamicDivDate').attr('id');
var split_id = id.split("_");
var getindex = parseInt(split_id[1]) + 1;
$(this).parents(".dynamicAddRemoveMain").parents('.dynamicDivDate').append('<div class="row mt-2 mb-2 divTime" id="dynamicTime_' + nextindex + '"><div class="col-lg-5 col-md-5 col-sm-5 col-5"><input id="start_event_time_' + getindex + '_' + (nextindex) + '" type="text" class="form-control start_event_time_picker" required autocomplete="off" placeholder="Select start Time" name="event_dates_times[scheduling_date_' + split_id[1] + '][time][scheduling_time_' + (nextindex) + '][start_time]"></div>' + '<div class="col-lg-5 col-md-5 col-sm-5 col-5"><input id="end_event_time_' + getindex + '_' + (getindex) + '" type="text" required class="form-control end_event_time_picker" autocomplete="off" placeholder="Select end Time" name="event_dates_times[scheduling_date_' + split_id[1] + '][time][scheduling_time_' + (nextindex) + '][end_time]"></div><div class="col-lg-2 col-md-2 col-sm-2 col-2"><button type="button" class="btn_remove_mtinput btn_remove_mtinput_time"><i class="far fa-trash-alt"></i></button></div></div>');
setTimePickerDynamic();
} else {
alert("Maximum limit 3");
}
});
$(document).on('click', '.btn_remove_mtinput_time', function() {
$(this).parents('.divTime').remove();
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R+E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer"
/>
<link href="https://code.jquery.com/ui/1.12.1/themes/pepper-grinder/jquery-ui.css" rel="stylesheet" />
<link href="https://cdn.rawgit.com/dubrox/Multiple-Dates-Picker-for-jQuery-UI/master/jquery-ui.multidatespicker.css" rel="stylesheet" />
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.4.5/jquery-ui-timepicker-addon.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.11.1.js"></script>
<script src="https://cdn.rawgit.com/dubrox/Multiple-Dates-Picker-for-jQuery-UI/master/jquery-ui.multidatespicker.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.4.5/jquery-ui-timepicker-addon.min.js"></script>
<div id="mdp-demo"></div>
<div id="show_calender_div"></div>
此日历选择多个日期,然后显示带有输入开始和结束时间的新行。然后单击添加按钮显示所选日期开始时间和结束时间的新行如何验证每个新行和前一行的开始时间和结束时间。
解决方案
推荐阅读
- javascript - 当有多个选项卡或窗口时,如何使用 navigator.serviceWorker.onmessage 在本地存储中存储一次数据?
- python - 为什么结果总是在 2.87 左右
- ios - 您如何解决“SDK 版本问题”?
- python - 无法循环通过设备
- angular - 刷新页面时显示找不到页面
- sqoop - Cloudera Sqoop 异常,当它通过 scoop 命令创建作业时
- powerbi - PowerBI 可以用来从多个 SAP-BW 多维数据集生成报告吗?
- kubernetes - 我是否需要在客户端使用 istio sidecar 代理才能应用路由规则?
- java - EmbeddedActiveMQBroker 的依赖关系是什么?
- json - 使用身份验证为 Domino 数据创建自定义 JSON API