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

これまでのところ非常にうまく機能していますが、現在の日付が2012年12月31日であると想像して、これを次のように呼びます。

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

2を返すはずですが、月は現在の月と同じではありません(年と同じ)。したがって、関数は-1を返します。私に何ができる?よろしくお願いします!!

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

4

3 に答える 3

4

You will never get what you want with the function you created.
You have to basically convert the dates you want to compare to a time stamp value.
Time stamps are the number of milliseconds from the epoch date. 1-1-1970.
If you take the difference of the time stamps then it just a simple process to calculate the amount of days difference.

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

ほんの少しの Google がこのコードを取得しました

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実行された場合は、年が一致しなかったことを意味し、アルゴリズムを追加して、異なる年の 2 つの日付の間に何日あるかを調べます (これも長くなる可能性があります)。

ありがとう

于 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 に答える