0

我需要一个将传入参数(日、月、年)与当前日期进行比较的函数。这个函数应该返回 0 代表昨天,1 代表当天,2 代表明天,3 代表后天......

我已经有了这个功能:

private function getNumberOfDay(day:int, month:int, year:int):int
        {
            var date: Date = new Date();

            if(date.month+1 == month && date.fullYear == year)
            {
                if(date.date == day)
                    return 1;
                else if(date.date + 1 == day)
                    return 2;
                else if(date.date + 2 == day)
                    return 3;
                else if(date.date + 3 == day)
                    return 4;
                else if(date.date + 4 == day)
                    return 5;
                else if(date.date + 5 == day)
                    return 6;
                else if(date.date - 1 == day)
                    return 0;
            }
            return -1;
        }

到目前为止它工作得非常好,但现在想象我们当前的日期是 31.12.2012,我称之为:

var numberOfDay:int = getNumberOfDay(1, 1, 2013);

它应该返回 2,但月份与我们当前的月份不同(与年份相同)。所以函数返回-1。我能做些什么?提前谢谢了!!

http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/Date.html

4

3 回答 3

4

你永远不会用你创建的函数得到你想要的。
您必须基本上将要比较的日期转换为时间戳值。
时间戳是从纪元日期算起的毫秒数。1970 年 1 月 1 日。
如果您采用时间戳的差异,那么计算天差的数量只是一个简单的过程。

function getNumberOfDay(day:int, month:int, year:int):int{
    // remember month is base 0 so january is 0 and dec is 11
    var millisecondsPerDay:int = 24*60*60*1000; //86400000
    var testDate:Date = new Date(year,month,day)
    var currentDate:Date = new Date()
    var days:int = Math.ceil((testDate.getTime() - currentDate.getTime())/millisecondsPerDay);
    // return the value plus 1 since you are offseting the from yesterday and not today
    return ++days;
}

trace('tomorrow --------------- ' + getNumberOfDay( 4, 5, 2012 )) //2
trace('yesterday -------------- ' + getNumberOfDay( 2, 5, 2012 )) // 0
trace('sometime in the future - ' + getNumberOfDay( 1, 1, 2013 )) // 244
trace('sometime in the past --- ' + getNumberOfDay( 1, 1, 2012 )) // -122
trace('3 days from yesteday --- ' + getNumberOfDay( 5, 5, 2012 )) // 3
于 2012-06-03T16:54:07.467 回答
2

只是一点点谷歌给我这个代码

public static function getDaysBetweenDates(date1:Date,date2:Date):int

{

       var one_day:Number = 1000 * 60 * 60 * 24;
       var date1_ms:Number = date1.getTime();
       var date2_ms:Number = date2.getTime();
       var difference_ms:Number = Math.abs(date1_ms - date2_ms);
       return Math.round(difference_ms/one_day);
}

以上应该可行,我的建议是使用它。如果您想改正算法,请继续添加elseafter if (date.fullYear == year)

因此,如果else执行它意味着年份不匹配,则添加算法以查找不同年份的两个日期之间的天数(这又可能很长)

谢谢

于 2012-06-03T13:50:01.773 回答
0

您可以尝试以下代码:

众所周知,2013-11-24 23:59 之后的日期是 2013-11-25。

public static function getDateOffset2(year:int,month:int,date:int):int
{
    var oneDay:Number = 1000 * 60 * 60 * 24;
    var now:Date = new Date();
    var firstDate:Date = new Date(year,month-1,date);

    var secondDate:Date = new Date(now.fullYear,now.month,now.date);
    var offset:Number = Math.abs(firstDate.time - secondDate.time);
    return offset/oneDay;
}
于 2013-11-24T14:21:44.473 回答