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;
}
4

3 回答 3

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
于 2012-11-21T16:43:44.493 回答
1

我不打算查看代码,但我可以回答您的问题“我想遍历项目列表,确定它们是过去、现在还是未来”。

首先,您要构建目标日期。如果是“现在”,只需使用 new Date()。如果是特定日期,请使用 new 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

如果您想使用综合的 Date 类,请使用DateJS,这是一个开源 JavaScript 日期和时间处理库,具有一些令人印象深刻的特性。

于 2012-11-21T16:47:49.523 回答
1

这是逐行解释。

函数声明...

function daysTilDate(expiredate){

采用参数 expiredate 将其设置为与前面附加“12/”和附加“/2012”的相同值。因此,如果 expiredate 的值为“10”,则新值现在为“12/10/2012”...

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

使用 expiredate 字符串实例化一个名为 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 行是无关的,因为这些值从未使用过......

于 2012-11-21T16:40:11.443 回答