2012-11-21 21 views
1

任何人都可以向我解释下面的代码吗?需要说明这个日期处理函数

例如,我想将今天的日期设置为今天(2012年11月21日),并将结束日期设置为12月3日。

原因是因为我想循环一个项目列表,确定他们是否在“过去”,“现在”或“未来”,并相应地为他们分配一个类。

我希望这是有道理的!任何帮助,非常感谢和欢迎!

function daysTilDate(expiredate){ 

    expiredate ="12/"+expiredate+"/2012"; 

    var thisDay=new Date(expiredate); 

    var CurrentDate = new Date(); 

    var thisYear=CurrentDate.getFullYear(); 

    thisDay.getFullYear(thisYear); 

    var DayCount=(thisDay-CurrentDate)/(1000*60*60*24); 

    DayCount=Math.round(DayCount); 

    return DayCount; 
} 
+0

属于:codereview.stackexchange.com –

+1

[MDN](https://developer.mozilla.org/)_is_值得一个书签,如果你想了解JS ... –

回答

1

这是一行一行的解释。

函数声明...

function daysTilDate(expiredate){ 

注意到EXPIREDATE设置它等于与 “12 /” 前缀和 “/ 2012” 附加相同值的参数。因此,如果EXPIREDATE的值是“10”,新的价值,现在是“2012年12月10日” ......

expiredate ="12/"+expiredate+"/2012"; 

实例使用EXPIREDATE字符串命名THISDAY一个新的Date对象...

var thisDay=new Date(expiredate); 

实例化使用默认构造函数将设置为今天的日期值命名的currentdate一个新的Date对象,...

var CurrentDate = new Date(); 

获取距离的currentdate年段(其先前设置到今天的日期)...

var thisYear=CurrentDate.getFullYear(); 

获取从THISDAY年段(这是较早设置为 “2012”)...

thisDay.getFullYear(thisYear); 

获取THISDAY和的currentdate,这是在毫秒之间的差异,并乘以通过1000 * 60 * 60 * 24,以获得天差...

var DayCount=(thisDay-CurrentDate)/(1000*60*60*24); 

大红大紫之前计算的区别...

DayCount=Math.round(DayCount); 

返回今天和传入的日2012年12月...

return DayCount; 

}

注意,2号线是拿到年终段是多余的区别,因为这些值从来没有使用过...

+0

谢谢你!非常感激! –

2

如果你想计算到期日的日期,你可以简化下面的方法。请注意,如果您未指定测试日期,则会将当前日期作为测试日期。

​function ​daysTilData(expireDate, testDate) { 

    if(typeof testDate === "undefined"){ 
     testDate = new Date(); // now   
    } 

    var diff = expireDate - testDate; 

    // minus value meaning expired days 
    return Math.round(diff/(1000*60*60*24)); 
} 

alert(daysTilData(new Date("12/31/2012"))); 
// result 40 

alert(daysTilData(new Date("12/31/2012"), new Date("1/12/2013"))); 
// result -12 
+0

干杯。我会加1IT但没有足够的信誉做:-( –

+0

@Antonio,现在你怎么做。 –

1

我不打算检查代码,但我可以回答你的问题:“我想循环查看项目列表,确定它们是过去,现在还是将来”。

首先,你要来构建你的目标日期。如果它是“现在”,只需使用新的Date()。如果它是特定的日期,则使用新的Date(dateString)。

其次,在JavaScript Date对象有返回日期的特性的各种成员。你可以用它来比较日期。所以,让我们说,你有你的日期字符串数组:

function loopDates(targetDateString, myDates) { 
    var targetDate, nextDate, status, ix; 
    targetDate = new Date(targetDateString); 
    for (ix = 0; ix < myDates.length; ++ix) { 
     nextDate = new Date(myDates[ix]); 
     if (nextDate.getFullYear() < targetDate.getFullYear()) { 
      status = "past"; 
     } else if (nextDate.getFullYear() > targetDate.getFullYear()) { 
      status = "future"; 
     } else { 
      // Year matches, compare month 
      if (nextDate.getMonth() < targetDate.getMonth()) { 
       status = "past"; 
      } else if (nextDate.getMonth() > targetDate.getMonth()) { 
       status = "future"; 
      } else { 
       // Month matches, compare day of month 
       if (nextDate.getDate() < targetDate.getDate()) { 
        status = "past"; 
       } else if (nextDate.getDate() > targetDate.getDate()) { 
        status = "future"; 
       } else { 
        // Day matches, present 
        status = "present"; 
       } 
      } 
     } 
     console.log("Date " + myDates[ix] + " is " + status + " from " + targetDateString); 
    } 
} 

loopDates("11/17/2012", ["11/16/2012", "11/17/2012", "11/18/2012"]); 

这将记录:

Date 11/16/2012 is past from 11/17/2012 
Date 11/17/2012 is present from 11/17/2012 
Date 11/18/2012 is future from 11/17/2012 

工作jsFiddle here

如果你想用一个综合类Date工作,使用DateJS,一个开源的JavaScript的日期和时间处理库,一些令人印象深刻的特点。

+0

谢谢!其实我已经设法拿出一个for循环,通过列表中的项目周期,运行一个if/elese检查以确定它们是否是在过去,现在或将来的 - 在此基础上在i贴daysTileDate功能 –

+0

这里是它的小提琴http://jsfiddle.net/Vasilev89/eQwrA/目前,它只是增加了一个班。 “未来”的所有列表项,但。 –

+0

这就是为什么我提供的代码对你的作品。 –