2012-06-03 66 views
0

我需要一個將傳入參數(日,月,年)與當前日期進行比較的函數。這個功能應該昨天,1爲明天,3返回0當天,2後天......AS3獲取日期偏移量與當前日期相比

我已經有了這個功能:

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

你永遠不會得到你想要的功能,你創建的功能。
您必須將您想要比較的日期基本上轉換爲時間戳值。
時間戳是從紀元日期開始的毫秒數。 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 
+0

非常感謝你們!它完美的作品! – Babsi

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

以上應該工作,我的建議是使用它。如果您想改正算法,請繼續並在if (date.fullYear == year)之後添加else

因此,如果else執行這意味着年內不匹配,然後添加算法來找出知道

感謝有多少天是在不同年份兩個日期之間(這又可能會很長)

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