将今天的日期与日期列表进行比较

时间:2013-06-04 17:47:16

标签: javascript jquery

如果这是重复的话,我很抱歉,但我找不到符合我问题的现有答案(我看过了!)。

我有一个列表,其中包含十几个项目,每个项目都有一个<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)*

并且没有显示任何内容。

你能帮忙,我觉得这很直接但是得不到结果呢?

5 个答案:

答案 0 :(得分: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();
    }
  }

答案 1 :(得分: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();
});

答案 2 :(得分: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(); 
        }
    });
})

答案 3 :(得分:1)

正如评论中所提到的,它总是更好地比较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();
  });

做出的假设:

修改

  • 不得不添加更多行,因为对于当前日期,它也在比较时间,因此没有匹配。使用.setHours(0, 0, 0, 0);
  • 从参数中删除了时间参数
  • >更改为<

答案 4 :(得分: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();
            }         
    });
})

我知道这是否是你的要求。