在表单选择的日期范围字符串中查找当前日期
Find current date in a date range string for form select
嗨,这是一个棘手的问题:)
我有一个json对象,我用这种方式从中创建一个选择表单字段:
for(var i = 0; i < jsonData.vpcourse[0].items.length; i++) {
$('#kw').append('<option value="'+jsonData.vpcourse[0].items[i].datum+'">'+jsonData.vpcourse[0].items[i].datum+'</option>');
console.log(jsonData.vpcourse[0].items[i].datum);
}
我的问题是:最后一个被添加的选项被选中了,但我需要选择实际日期在哪个日期范围内的选项:
<option value="07.10.2013-01.11.2013">07.10.2013-01.11.2013</option>
<option value="09.09.2013-04.10.2013">09.09.2013-04.10.2013</option>
<option value="12.08.2013-06.09.2013">12.08.2013-06.09.2013</option>
<option value="15.07.2013-09.08.2013" selected="selected">15.07.2013-09.08.2013</option>
<option value="17.06.2013-12.07.2013">17.06.2013-12.07.2013</option>
<option value="20.05.2013-14.06.2013">20.05.2013-14.06.2013</option>
<option value="22.04.2013-17.05.2013">22.04.2013-17.05.2013</option>
<option value="25.03.2013-19.04.2013">25.03.2013-19.04.2013</option>
最好的方法是在for循环中直接检查实际日期是否在日期范围"07.10.2013-01.11.2013"内,并将selected="selected"添加到该附件中。
这有可能吗!?
更新:
for(var i = 0; i < jsonData.vpcourse[0].items.length; i++)
{
// testDate looks like: 29.12.2014-23.01.2015
var testDate = jsonData.vpcourse[0].items[i].datum;
var n=testDate.split("-");
var x = n[0].split(".");
var y = n[1].split(".");
var smaller = new Date(x[2], x[1], x[0]);
var bigger = new Date(y[2], y[1], y[0]);
var today = new Date();
if (smaller <= today && today <= bigger) {
$('#kw').append('<option value="'+jsonData.vpcourse[0].items[i].datum+'" selected="selected">'+jsonData.vpcourse[0].items[i].datum+'</option>');
} else {
$('#kw').append('<option value="'+jsonData.vpcourse[0].items[i].datum+'">'+jsonData.vpcourse[0].items[i].datum+'</option>');
}
//console.log(jsonData.vpcourse[0].items[i].datum);
}
工作90%:D它选择这个:
<option value="12.08.2013-06.09.2013">12.08.2013-06.09.2013</option>
<option value="15.07.2013-09.08.2013">15.07.2013-09.08.2013</option>
<option value="17.06.2013-12.07.2013" selected="selected">17.06.2013-12.07.2013</option>
<option value="20.05.2013-14.06.2013">20.05.2013-14.06.2013</option>
但相反,这应该是一个选项,那么怎么了?:(
更新2:
它起作用了,问题是我必须从月份变量中取-1。。。
工作示例:
var today = new Date();
for(var i = 0; i < jsonData.vpcourse[0].items.length; i++)
{
var testDate = jsonData.vpcourse[0].items[i].datum;
var n=testDate.split("-");
var x = n[0].split(".");
var y = n[1].split(".");
var smaller = new Date(x[2], x[1]-1, x[0]);
var bigger = new Date(y[2], y[1]-1, y[0]);
if (smaller <= today && today <= bigger) {
$('#kw').append('<option value="'+jsonData.vpcourse[0].items[i].datum+'" selected="selected">'+jsonData.vpcourse[0].items[i].datum+'</option>');
} else {
$('#kw').append('<option value="'+jsonData.vpcourse[0].items[i].datum+'">'+jsonData.vpcourse[0].items[i].datum+'</option>');
}
//console.log(jsonData.vpcourse[0].items[i].datum);
}
Thx转到LightStyle:)
我有一个非常优雅的解决方案,很容易理解,但我的建议是使用Moment.js作为处理日期的插件助手,并使用一个名为Moment-range.js的简单插件为您计算范围。
有了这些插件,你的代码可以简化为:
// Coming from json or whatever...
var dates = ["07.10.2013-01.11.2013",
"09.09.2013-04.10.2013",
"12.08.2013-06.09.2013",
"15.07.2013-09.08.2013",
"17.06.2013-12.07.2013",
"20.05.2013-14.06.2013",
"22.04.2013-17.05.2013",
"25.03.2013-19.04.2013"];
$(dates).map(function(i,item) {
// Split the dates
var datesSplit = item.split("-");
// Define dates and range
var start = moment(datesSplit[0], "DD.MM.YYYY");
var end = moment(datesSplit[1], "DD.MM.YYYY");
var today = moment();
var range = moment().range(start, end);
// Create Option
var option = $("<option>").text(item);
// Add parameter when today within range
if (today.within(range)) {
option.attr("selected", "selected");
}
$("select").append(option);
});
我不认为你会得到更容易理解和维护的代码。这是正在运行的Demo。
相关文章:
- 在字符串中查找所有图像 src URL 并存储在数组中
- 用于查找子字符串的Regex
- 遍历DOM查找字符串有时会正确返回
- Javascript Regex,在字符串中查找数字
- 使用Regex查找URL中的特定字符串
- 在数组中查找某些字符串(Javascript)
- 查找并替换特定字符串
- 在从索引位置返回的字符串中查找空白
- 使用捕获组查找和替换json字符串中出现的所有短语
- 在Javascript中查找子字符串,并前置/附加一些字符
- 查找字符串及其索引中的最大数字
- 使用正则表达式查找字符串中的不匹配字符
- 如何更改字符串的查找方法
- 修复了如何在容器中查找和替换字符串的功能
- 通过包含的字符串查找对象
- 使用var和字符串查找文件夹
- 搜索字符串查找名称,并使用for循环记录每次出现的名称
- 二进制字符串查找
- 使用jquery和HTML字符串查找每个链接
- 按字符串查找对象索引