如果选项不在给定时间内,我需要在遍历选项后删除它们。但是他们似乎仍然存在。
var i;
var dates = document.getElementById("event_date")
for (i = 1; i < dates.options.length; i++) {
var dateString = dates.options[i].value;
var date = new Date(dateString)
var timestamp = date.getTime();
var anfangsdatum = new Date("2019-06-01 23:59:00").getTime();
var enddatum = new Date("2019-07-01 23:59:00").getTime();
if (anfangsdatum < timestamp < enddatum ) {
// The selected time in summer
dates.options[i].style.display = "block";
} else if (timestamp > enddatum) {
dates.options[i] = null;
} else {
dates.options.remove(i);
}
}
sample dateString = 2019-07-01 09:00
答案 0 :(得分:0)
这是因为您的第一个条件anfangsdatum < timestamp < enddatum
如果始终为true,那么就永远不会删除任何内容!
您的第一个if应该是anfangsdatum < timestamp && timestamp < enddatum
var timestamp = new Date();
var anfangsdatum = new Date("2019-06-01 23:59:00").getTime();
var enddatum = new Date("2019-07-01 23:59:00").getTime();
console.log(anfangsdatum < timestamp < enddatum);
// this evaluates to true or false
console.log(anfangsdatum < timestamp);
// no matter what you always get true in the end
console.log(true < timestamp < enddatum);
console.log(false < timestamp < enddatum);
答案 1 :(得分:0)
您的代码中有一些小错误。
for (i = 1; i < dates.options.length; i++)
您的循环从1开始-因为它是一个数组,所以您应该从0开始-除非出于某种原因要跳过第一个选项。
if (anfangsdatum < timestamp < enddatum )
这种比较没有意义,应该是:
if (anfangsdatum < timestamp && timestamp < enddatum )
此外,如果以上条件的计算结果为false,则该删除选项了。
var i;
var dates = document.getElementById("event_date")
for (i = 0; i < dates.options.length; i++) {
var dateString = dates.options[i].value;
var date = new Date(dateString)
var timestamp = date.getTime();
var anfangsdatum = new Date("2019-06-01 23:59:00").getTime();
var enddatum = new Date("2019-07-01 23:59:00").getTime();
if (anfangsdatum < timestamp && timestamp < enddatum) {
dates.options[i].style.display = "block";
} else {
dates.options.remove(i);
}
}
<select id="event_date">
<option value="2019-07-01 09:00">2019-07-01 09:00</option>
<option value="2018-07-01 09:00">2018-07-01 09:00</option>
</select>