我不知道你是怎么做到的,但是使用 jQuery 的方式看起来是这样的。基本上,我们听了apply.daterangepicker 和cancel.daterangepicker 并处理了它。调用 prepareDateRangeControl 将初始化所有日期范围选择器。请注意,这是我们在 ASP.NET MVC 项目中作为服务器端呈现和 jQuery 呈现的方式,仅在页面呈现后触摸一些 UI 元素。
function prepareDateRangeControl() {
function adjustWidth(control) {
control.attr('size', control.val().length);
}
$(".form-control.daterange").each(function () {
$(this).daterangepicker({
autoUpdateInput: false,
applyClass: "btn-primary",
timePicker: true,
timePicker24Hour: true,
format: $(this).data("format"),
locale: {
cancelLabel: "Clear",
format: $(this).data("format")
},
ranges: {
"Today": [moment().startOf("day"), moment().endOf("day")],
"Yesterday": [moment().subtract(1, "days").startOf("day"), moment().subtract(1, "days").endOf("day")],
"Last 7 Days": [moment().subtract(6, "days").startOf("day"), moment().endOf("day")],
"Last 30 Days": [moment().subtract(29, "days").startOf("day"), moment().endOf("day")],
"This Month": [moment().startOf("month"), moment().endOf("month")]
}
});
adjustWidth($(this));
});
$(".form-control.daterange").on("apply.daterangepicker", function (event, picker) {
if (picker.startDate.hour() === 0 && picker.startDate.minute() === 0) {
if (picker.endDate.hour() === 0 && picker.endDate.minute() === 0) {
picker.endDate.hour("23");
picker.endDate.minute("59");
}
}
var format = $(this).data("format");
var text = picker.startDate.format(format) + " - " + picker.endDate.format(format);
picker.element.val(text);
adjustWidth($(this));
});
$(".form-control.daterange").on("cancel.daterangepicker", function (event, picker) {
picker.element.val("");
adjustWidth($(this));
});
}
对于 Angular 项目,我们也使用ng2-daterangepicker,但这个用例我们不需要按照您的要求处理时间选择器。我希望这个想法和上面的代码一样,因为它也封装并提供了与原始库相同的事件。