如果这是重复的,我很抱歉,但我找不到与我的问题相匹配的现有答案(我已经看过了!)。
我有一个大约有十几个项目的列表,每个项目都有 <span>*fixed date*</span>
.
包含日期的列表看起来像这样......
<ul id="whatson">
<li>
<span class="chkdate">06/04</span>
somestuff1
</li>
<li>
<span class="chkdate">06/05</span>
somestuff2
</li>
.......
</ul>
我想过滤列表,以便隐藏所有早于今天的日期。
会给我今天的日期,例如mm/dd = 06/04,看起来不错。
我现在想根据格式为例如的每个列表项检查这一点06/04 并隐藏那些早于今天的项目。
它只需要在页面加载时运行一次。
到目前为止我的代码...
$(document).ready(function () {
var d = new Date();
var month = d.getMonth() + 1;
var day = d.getDate();
var todaysdate = (month < 10 ? '0' : '') + month + '/' + (day < 10 ? '0' : '') + day;
alert("checking " + datetocheck + " against today = " + todaysdate);
--- * temp check *
var datetocheck = $('#whatson li span.chkdate').text();
if (datetocheck < todaysdate) {
$('#whatson li').hide();
} else {
$('#whatson li').show();
};
})
我的警报显示..
Checking 06/0406/04 against today 06/04 *(when all list dates match)*
并正确显示。
更改提醒显示的一个或多个列表日期
Checking 06/0306/04 against today 06/04 *(when one or more list dates don't match)*
什么也没显示。
你能帮忙吗,我以为这很简单,但就是得不到结果?
最佳答案
正如评论中提到的,比较 Date
类型的变量总是更好。 (这样您就不必进行截至 12 月的广泛比较,这可能很麻烦)。所以,我使用的方法是将您的文本转换为 Date
输入对象并将其与当前日期进行比较:
var d = new Date();
d.setHours(0, 0, 0, 0);
var year = d.getFullYear();
$(".chkdate").each(function (i) {
//added a setHours function to make time parameters of Date zero before comparing
((new Date($(this).text() + "/" + year)).setHours(0, 0, 0, 0) < d) ? $(this).closest("li").hide() : $(this).closest("li").show();
});
所做的假设:
对于 HTML 中的元素来说,年份始终是当前年份
mm/dd
的格式会一直维护查看 fiddle :http://jsfiddle.net/UAR8y/8/
编辑:
- 必须添加更多行,因为对于当前日期,它也在比较时间,因此不匹配。使用
.setHours(0, 0, 0, 0);
从参数中删除了时间参数 - 已更改
>
至<
关于javascript - 将今天的日期与日期列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924260/