javascript:如何隐藏代表过去日期的DIV / UL?

时间:2009-09-15 15:09:57

标签: javascript date

我有一些看起来像这样的代码:

<h3>Thursday Sep 10</h3>
<ul>great stuff in here</ul>

<h3>Friday Sep 18</h3>
<ul>other stuff in here</ul>

他们有一个基本的jQuery hidey-showy事情发生:点击H3,下面的UL扩展或收缩。默认情况下,它们都显示/打开。

我想进行设置,以便默认情况下签订任何已过去的日期(例如本例中的9月10日)。

我似乎无法让我的CMS吐出一个比较好的日期(如纪元时间)作为H3的ID。有没有办法可以使用js的Date()函数从现有信息中构建类似的东西(“9月10日星期四”),还是用其他方式来完成这项工作?

(所有日期都是在2009年,该网站将在2010年不存在,因此将年份硬编码到任何功能中都是A-OK,如果这是需要做的事情。)

谢谢!

4 个答案:

答案 0 :(得分:2)

第一个障碍是将文本日期转换为可以初始化JavaScript日期对象的有效字符串。

转换过程(包括有效的字符串格式)包含在http://programming.top54u.com/post/Javascript-Convert-String-to-Date.aspx

不幸的是,您的文本表示不是JavaScript Date构造函数的有效输入。在Date构造函数中使用它们之前,您需要编写一个函数将字符串转换为有效的表示形式。

初始化Date对象后,您可以对它们进行比较(请参阅http://www.w3schools.com/jS/js_obj_date.asp上的“比较两个日期”)。

答案 1 :(得分:1)

我同意梅奥。如果您有权访问日期时间值并希望将其转换为类似于您所拥有的字符串(“9月10日星期四”),则可以使用this

答案 2 :(得分:0)

保持简单;你真的不需要一个合适的日期解析器来比较你的日期。我感觉你正在寻找快速而又脏的东西:

var now = new Date();
var nowHash = now.getMonth() << 5 + now.getDate();

$("h3").each(function (e) {
    var tokens = $(e).html().split(" ");
    var hash = [ "Jan", "Feb", ..., "Dec" ].indexOf(tokens[1]) << 5 + tokens[2];

    if (hash < nowHash) {
        // contract the <ul> that follows
    }
});

月* 32(或向左移5位)+天足以为您提供可与其他日期进行比较的日期的唯一哈希值。

答案 3 :(得分:0)

梅奥对于没有快速的方法是正确的。所以这是我对DIY解决方案的看法。

基本上,您自己提取日期并比较日期。


var aMonths = { "Jan":0, "Feb":1 ..., "Sep":8, ... };
var aToday  = new Date();

var aH3Text = .....;  //  Get the value via jQuery
var aDataElements = aH3Text.split("");
var aMonthIndex   = aMonths[aDataElements[1]];
var aDateIndex    = aDataElements[2];

var aH3Date = new Date();
aH3Date.setFullYear(2009, aMonthIndex, aDateIndex);

if (aH3Date > today) {
    // BEFORE today
} else {
    // AFTER today
}

希望这有帮助。