需要解释此日期处理功能

时间:2012-11-21 16:25:06

标签: javascript

有人可以向我解释以下代码吗?

例如,我想将今天的日期设置为今天(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;
}

3 个答案:

答案 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

答案 1 :(得分:1)

以下是逐行解释。

功能声明......

function daysTilDate(expiredate){

使参数expiredate将其设置为等于“12 /”前置且附加“/ 2012”的相同值。因此,如果expiredate的值为“10”,则新值现在为“12/10/2012”......

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

使用expiredate string ...

实例化一个名为thisDay的新Date对象
var thisDay=new Date(expiredate);

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

var CurrentDate = new Date();

从CurrentDate获取Year部分(之前设置为今天的日期)......

var thisYear=CurrentDate.getFullYear();

从thisDay获取Year段(之前设置为“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行是无关紧要的,因为这些值从未使用过......

答案 2 :(得分:1)

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

首先,您要构建目标日期。如果它是“现在”,只需使用新的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日期和时间处理库,具有一些令人印象深刻的功能。