2013-06-04 166 views
2

如果这是重复的,但我找不到与我的问题相匹配的现有答案(我看了!)。将今天的日期与日期列表进行比较

我有一个列表,每个都有一个<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)* 

,并没有什么表示。

你能帮忙吗,我以为这会挺直的,但不能得到结果?

+3

你打算如何处理年终边缘状态? 12/31小于1/1,对不对?您需要使用完整的Date对象才能使用比较运算符。 – Tap

+0

一个奇妙的回应!谢谢大家非常感谢。刚刚花了几个小时尝试每一个,(更多的是学习的原因比任何东西!)关键是使用'each'的循环。 'passionateCoder对.closest的使用对我来说是新的,并且保存了'养育子女',所以我不得不使用它,假设不包括今天的事件可以修复。 – Neil

+0

passionCoder在我输入最后一条评论时发布了'修复'。所有排序和巡航。 – Neil

回答

1

正如评论所说,它总是更好地对比Date类型(变量,让你neednt需要长达十二月广泛的比较照顾,这可能很麻烦)。所以,我用的方法是将文本转换为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(); 
    }); 

假设:

编辑

  • 只好添加一些行,因为它是时间比较当前日期以及使didnt匹配。从参数中删除时间参数使用.setHours(0, 0, 0, 0);
  • 改变><
+1

这似乎是最光鲜的解决方案,不得不改变>以<隐藏'旧日期'(没问题),但为什么它不显示今天的项目? – Neil

+0

编辑答案&小提琴..因为这个代码变得稍大:( – krishgopinath

+0

这是做了诡计,非常赞赏。现在玩这个,直到我打破它!谢谢您抽出时间来帮助。 – Neil

1

你需要一个for循环:

var datestocheck = $('#whatson li span.chkdate'); 

    for (var i = 0; i < datestocheck.length; i++) { 
    var compare = parseDate(datestocheck[i].text()); 

    if (compare < todaysdate) { 
     datestocheck[i].hide(); 
    } 
    } 
+0

和东西来比较你的日期:http://stackoverflow.com/questions/492994/compare-dates-with-javascript – jammykam

+1

顺便说一句:你应该考虑添加一个'datetime'属性到你的项目,如'datetime =“YYYY-MM -DD“' – Jonathan

+0

@jammykam确实,在代码中添加了parseDate()... – Jonathan

0

请看看http://jsfiddle.net/2dJAN/57/

$(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; 
    $('#whatson li').each(function(){ 
     var datetocheck = $(this).text(); 
     if (datetocheck < todaysdate) { 
      $(this).hide(); 
      }   
    }); 
}) 

可我知道这是你的要求或没有。

+0

我错过了'each'来循环它,谢谢! – Neil

+0

这也似乎只是隐藏日期,而不是(父母)李,即整个文本。 – Neil

1

Example on jsFiddle

示例HTML

<ul id="whatson"> 
    <li> 
    <span class="chkdate">06/01</span> 
    somestuff1 
    </li> 
    <li> 
    <span class="chkdate">06/04</span> 
    somestuff1 
    </li> 
    <li> 
    <span class="chkdate">06/05</span> 
    somestuff2 
    </li> 
</ul> 

脚本

var today = new Date(); 
$("#whatson .chkdate").each(function() { 
    // split the text and get the month/day value 
    var datepieces = $(this).text().split("/"); 
    var month = datepieces[0]; 
    var day = datepieces[1]; 

    // if the month of the element is previous to today's month 
    // hide the li 
    if (month < (today.getMonth() + 1)) 
     $(this).closest("li").hide(); 

    // if the day of the element is previous to today 
    // hide the li 
    if (day < today.getDate()) 
     $(this).closest("li").hide(); 
}); 
+0

是否有分两个阶段进行检查的好处,而不仅仅是一个月? – Neil

1

jsFiddle Example

通过使用所选择的每个元件的.each() jQuery函数来循环。使用JavaScript .split()函数将文本值转换为日期。另请参阅documentation on JavaScript dates

HTML:

<ul id="whatson"> 
    <li><span class="chkdate">06/03</span> somestuff1</li> 
    <li><span class="chkdate">06/04</span> somestuff1</li> 
    <li><span class="chkdate">06/05</span> somestuff2</li> 
</ul> 

的JavaScript:

$(document).ready(function() { 
    var todaysdate = new Date(); 

    var datestocheck = $('#whatson li').each(function (i, v) { 
     var listitem = $(v); var chkdate = $('span', listitem); 

     var stringdate = chkdate.text(); 
     var monthtocheck = stringdate.split('/')[0]; 
     var daytocheck = stringdate.split('/')[1]; 

     var datetocheck = new Date(); 
     datetocheck.setFullYear(
      todaysdate.getFullYear(), // four digit year 
      monthtocheck-1, // month number minus 1 b/c month is 0-11 
      daytocheck // the day number 
     ); 

     //alert(datetocheck + ' < ' + todaysdate); 

     if (datetocheck < todaysdate) { 
      listitem.hide(); 
     } else { 
      listitem.show(); 
     } 
    }); 
}) 
相关问题