2009-09-15 28 views
0

我有一些代码,看起来像这样:javascript:如何隐藏代表过去日期的DIV/UL?

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

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

他们有一个基本的jQuery hidey,艳丽的事情发生了:点击H3和UL下方膨胀或收缩。默认情况下,它们全部显示/打开。

我想设置它,以便任何已经过去的日期(如本例中的Sep 10)都默认收缩。

我似乎无法让我的CMS吐出一个很好的可比较日期(如纪元时间)以用作H3的ID。有没有一种方法可以使用js的Date()函数从现有信息(“9月10日星期四”)或其他方式完成此类构建?

(所有的日期是在2009年,该网站将不会在2010年存在,所以硬编码到一年的任何功能都OK,如果这是需要做什么。)

谢谢!

回答

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上的“比较两个日期”)。

+0

你并不需要将字符串转换为日期来比较它们。这只会让问题更加复杂。 –

+0

是的,但我已经学会了一种艰难的方式,每当我尝试做一些快速ñ肮脏的方式它总是会回来咬我以后。所以复杂的n正确的方式! – Eileen

1

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

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位至左)+天足以让你约会的一个唯一的哈希,可以与其他日期进行比较。

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 
} 

希望这会有所帮助。