获取jQueryUI的datepicker中range之间的天数
Obtain the days between the range in the datepicker of jQueryUI
我正在使用 jQuery UI
的 date range picker,它运行良好。但现在我想也许获取范围之间天数的列表是有用的。这可能吗?
我手动定义了哪些月份有 30 天和 31 天,2 月有 28 天,并比较了起始日和结束日的年份。但我认为必须有一个更简单的选择。
很抱歉我没有代码可以显示,因为我不知道我必须使用什么函数或方法,因为我的代码可以正常工作,但我只是想也许有更好的选择。如果你认为这个问题对这个页面来说是一个糟糕的问题,请评论它,我会立即将其删除。
您可以使用 .setDate()
为日期对象执行此操作。
Expected values are 1-31, but other values are allowed:
0
will result in the last day of the previous month
-1
will result in the day before the last day of the previous month
If the month has 31 days:
32
will result in the first day of the next month
If the month has 30 days:
32
will result in the second day of the next month
利用两个日期之间的天数差,您可以迭代并创建具有设置天数的新 Date 对象。
$(function() {
var dateFormat = "mm/dd/yy";
function getDate(element) {
var date;
try {
date = $.datepicker.parseDate(dateFormat, element.value);
} catch (error) {
date = null;
}
return date;
}
function listDays(dta, dtb) {
var result = [];
if (dta == undefined || dtb == undefined) {
console.log(dta, dtb);
return [];
}
var dayDiff = (dtb - dta) / 86400000;
var d = dta.getDate();
var n = new Date(dta.setDate(d));
for (var i = 0; i <= dayDiff; i++) {
n = new Date(n.setDate(d));
d++;
if (d > 32) {
d = 2;
}
result.push($.datepicker.formatDate(dateFormat, n));
}
return result;
}
var from = $("#from")
.datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 3
})
.on("change", function() {
to.datepicker("option", "minDate", getDate(this));
}),
to = $("#to").datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 3
})
.on("change", function() {
from.datepicker("option", "maxDate", getDate(this));
console.log(listDays(getDate(from[0]), getDate(this)));
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<label for="from">From</label>
<input type="text" id="from" name="from">
<label for="to">to</label>
<input type="text" id="to" name="to">
我正在使用 jQuery UI
的 date range picker,它运行良好。但现在我想也许获取范围之间天数的列表是有用的。这可能吗?
我手动定义了哪些月份有 30 天和 31 天,2 月有 28 天,并比较了起始日和结束日的年份。但我认为必须有一个更简单的选择。
很抱歉我没有代码可以显示,因为我不知道我必须使用什么函数或方法,因为我的代码可以正常工作,但我只是想也许有更好的选择。如果你认为这个问题对这个页面来说是一个糟糕的问题,请评论它,我会立即将其删除。
您可以使用 .setDate()
为日期对象执行此操作。
Expected values are 1-31, but other values are allowed:
0
will result in the last day of the previous month-1
will result in the day before the last day of the previous monthIf the month has 31 days:
32
will result in the first day of the next monthIf the month has 30 days:
32
will result in the second day of the next month
利用两个日期之间的天数差,您可以迭代并创建具有设置天数的新 Date 对象。
$(function() {
var dateFormat = "mm/dd/yy";
function getDate(element) {
var date;
try {
date = $.datepicker.parseDate(dateFormat, element.value);
} catch (error) {
date = null;
}
return date;
}
function listDays(dta, dtb) {
var result = [];
if (dta == undefined || dtb == undefined) {
console.log(dta, dtb);
return [];
}
var dayDiff = (dtb - dta) / 86400000;
var d = dta.getDate();
var n = new Date(dta.setDate(d));
for (var i = 0; i <= dayDiff; i++) {
n = new Date(n.setDate(d));
d++;
if (d > 32) {
d = 2;
}
result.push($.datepicker.formatDate(dateFormat, n));
}
return result;
}
var from = $("#from")
.datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 3
})
.on("change", function() {
to.datepicker("option", "minDate", getDate(this));
}),
to = $("#to").datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 3
})
.on("change", function() {
from.datepicker("option", "maxDate", getDate(this));
console.log(listDays(getDate(from[0]), getDate(this)));
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<label for="from">From</label>
<input type="text" id="from" name="from">
<label for="to">to</label>
<input type="text" id="to" name="to">