package common
{
/**
*@title as3指定的两个公历日期相差天数类库
*@author
*@version 0.1
*@date 2010.08.17
*@environment as3.0 FlashPlayer9
*@调用方式 trace(SelfDateUtil.manyDayNum("20081230", "20110317"));
* */
public class SelfDateUtil
{
public function SelfDateUtil()
{
}
/**
* 虽然名字为fromFormatDayStr和toFormatDayStr, 单两个参数所代表的开始和结束年份没有先后顺序;如:
* SelfDateUtil.manyDayNum("20081230", "20110317")与SelfDateUtil.manyDayNum("20110317", "20081230")等效。
* */
public static function manyDayNum(fromFormatDayStr:String, toFormatDayStr:String):Number
{
var manyAllDayNum:Number=0; //间隔的天数
var _fromYear:int=int(fromFormatDayStr.substr(0, 4));
var _toYear:int=int(toFormatDayStr.substr(0, 4));
if (_toYear == _fromYear)
{ //同一年
manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[0]) - Number(alreadyOverDay(fromFormatDayStr)[0]);
}
else if (Math.abs(_toYear - _fromYear) == 1)
{ //相差一年
if (_toYear > _fromYear)
{
manyAllDayNum=Number(alreadyOverDay(fromFormatDayStr)[1]) + Number(alreadyOverDay(toFormatDayStr)[0]);
}
else
{
manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[1]) + Number(alreadyOverDay(fromFormatDayStr)[0]);
}
}
else
{ //相差两年或者两年以上
var mangYearNum:Number=Math.abs(Number(_toYear - _fromYear)); //中间间隔的年份
if (_toYear > _fromYear)
{
manyAllDayNum=Number(alreadyOverDay(fromFormatDayStr)[1]) + Number(alreadyOverDay(toFormatDayStr)[0]);
for (var i:int=1; i < mangYearNum; i++)
{
if (isRunYear(String(_fromYear + i)))
{ //是闰年
manyAllDayNum+=366;
}
else
{ //不是闰年
manyAllDayNum+=365;
}
}
}
else
{
manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[1]) + Number(alreadyOverDay(fromFormatDayStr)[0]);
for (var j:int=1; j < mangYearNum; j++)
{
if (isRunYear(String(_toYear + j)))
{ //是闰年
manyAllDayNum+=366;
}
else
{ //不是闰年
manyAllDayNum+=365;
}
}
}
}
return manyAllDayNum;
}
/**指定的一年之内已经过了多少天了(算上当天),
*dayStr标准格式为YYYYMMDD,例如:20100816
*要保证dayStr参数的格式和实际含义正确,如不能出现20100229
*[0]表示已经过了多少天,[1]表示还剩下多少天 */
public static function alreadyOverDay(dayFormatStr:String):Array
{
var _tempArr:Array=new Array();
var alreadyDayNum:int=0;
var _year:int=int(dayFormatStr.substr(0, 4));
var _month:int=int(dayFormatStr.substr(4, 2));
var _day:int=int(dayFormatStr.substr(6, 2));
if (_month == 1)
{
alreadyDayNum=_day;
}
else if (_month == 3)
{
alreadyDayNum=31 + _day;
}
else if (_month == 4)
{
alreadyDayNum=62 + _day;
}
else if (_month == 5)
{
alreadyDayNum=92 + _day;
}
else if (_month == 6)
{
alreadyDayNum=123 + _day;
}
else if (_month == 7)
{
alreadyDayNum=153 + _day;
}
else if (_month == 8)
{
alreadyDayNum=184 + _day;
}
else if (_month == 9)
{
alreadyDayNum=215 + _day;
}
else if (_month == 10)
{
alreadyDayNum=245 + _day;
}
else if (_month == 11)
{
alreadyDayNum=276 + _day;
}
else if (_month == 12)
{
alreadyDayNum=306 + _day;
}
if (isRunYear(dayFormatStr))
{ //是闰年
if (_month == 2)
{
alreadyDayNum=31 + _day;
}
else if (_month == 1)
{
}
else
{
alreadyDayNum+=29;
}
_tempArr[0]=alreadyDayNum; //已经过的天数(算上今天)
_tempArr[1]=366 - alreadyDayNum; //还剩多少天没有过
}
else
{ //不是闰年
if (_month == 2)
{
alreadyDayNum=31 + _day;
}
else if (_month == 1)
{
}
else
{
alreadyDayNum+=28;
}
_tempArr[0]=alreadyDayNum; //已经过的天数(算上今天)
_tempArr[1]=365 - alreadyDayNum; //还剩多少天没有过
}
return _tempArr;
}
/*指定的一年中过了多少天了,dayStr标准格式为YYYYMMDD,例如:20100816*/
public static function isRunYear(dayStr:String):Boolean
{
var _year:Number=Number(dayStr.substr(0, 4));
if ((_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
}
}