AS3获取与当前日期相比的日偏移量

时间:2012-06-03 13:31:36

标签: actionscript-3 date

我需要一个功能,可以将传入的参数(日,月,年)与当前日期进行比较。这个函数应该为昨天返回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;
        }

它到目前为止工作非常好,但现在想象我们当前的日期是2012年12月31日,我称之为:

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
}

以上应该有用,我的建议是使用它。如果您想要更正算法,请继续在else之后添加if (date.fullYear == year)

因此,如果执行else,则表示年份不匹配,然后添加算法以查找不同年份的两个日期之间的天数(这可能会很长)

由于

答案 2 :(得分: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;
}