javascript - js-datepicker 日期范围结束基于开始
问题描述
我正在使用这个日期选择器https://www.npmjs.com/package/js-datepicker并让它大部分工作。但是,我希望根据开始日期中选择的内容来确定第二个日期的开始日期和结束日期。
HTML:
<input type="text" name="message[dateStart][]" class='date date-start' placeholder="Start Date">
<input type="text" name="message[dateEnd][]" class='date date-end' placeholder="End Date">
当前的 JavaScript
// set date to 2 weeks from now calculated in milliseconds
var afterTwoWeeks = new Date(+new Date + 1209600000);
var pickerEnStart = datepicker('.date-start', {
// dateSelected: new Date(2099, 0, 5)
minDate: new Date(afterTwoWeeks),
startDate: new Date(afterTwoWeeks),
noWeekends: true,
formatter: (input, date, instance) => {
const value = date.toLocaleDateString()
input.value = value // => '1/1/2099'
}
})
var pickerEnEnd = datepicker('.date-end', {
// dateSelected: new Date(2099, 0, 5)
minDate: new Date(afterTwoWeeks),
startDate: new Date(afterTwoWeeks),
noWeekends: true,
formatter: (input, date, instance) => {
const value = date.toLocaleDateString()
input.value = value // => '1/1/2099'
}
})
我尝试了几件事,但无法根据选择的开始日期来获得开始/结束的结束日期。
解决方案
这似乎按照我期望的方式工作。
HTML
<input type="text" name="message[dateStart][]" class='date date-start' placeholder="Start Date">
<input type="text" name="message[dateEnd][]" class='date date-end' placeholder="End Date">
<input type="button" id="reset" name="reset" value="Reset">
JS
var afterTwoWeeks = new Date(+new Date + 1209600000)
// none of this works well if we can't clear dates
var reset = document.getElementById('reset')
reset.onclick = function() {
pickerEnStart.setDate()
pickerEnEnd.setDate()
}
var pickerEnStart = datepicker('.date-start', {
minDate: new Date(afterTwoWeeks),
startDate: new Date(afterTwoWeeks),
noWeekends: true,
formatter: (input, date, instance) => {
const value = date.toLocaleDateString()
input.value = value
},
id: 1,
onSelect: (instance, date) => {
// set the minimum date
instance.setMin(date)
// if end date not selected...
if(!pickerEnEnd.dateSelected) {
// set the end date to force the calendar to display that month
pickerEnEnd.setDate(new Date(date.getTime() + 1000*60*60*24), true)
pickerEnEnd.firstTime = true
}
}
})
var pickerEnEnd = datepicker('.date-end', {
minDate: new Date(afterTwoWeeks),
startDate: new Date(afterTwoWeeks),
noWeekends: true,
formatter: (input, date, instance) => {
const value = date.toLocaleDateString()
input.value = value
},
id: 1,
onSelect: (instance, date) => {
instance.setMax(date)
},
onShow: function(instance) {
// if this is the first time we're seeing this calendar...
if (instance.firstTime) {
// get rid of the end date we set to force it to this month
instance.setDate();
instance.firstTime = false;
}
},
})
推荐阅读
- google-sheets - 用一行公式将所有先前的值相加
- mysql - 计算多个日期范围之间的总天数
- reactjs - 使特定样式仅适用于表体中的 TableCell
- html - 导航栏中的下拉菜单在区域外打开。如何解决?
- python-3.x - 使用 MsAzure 快速入门示例代码将大型 .wav 文件转换为 .txt 文件 [连续识别]
- excel - 如何应用 InStr 将标题名称与名称数组匹配?
- amazon-dynamodb - DynamoDb 检查给定 SS 中包含的 SS 属性
- python - df.dropna() 不删除带有 na 的行
- r - R data.table 对函数参数执行连接
- javascript - Firebase 使用 javascript 查找具有用户名的用户