تبدیل تاریخ شمسی به میلادی و بالعکس

کد:
[LEFT]class Shamsi {
	function Shamsi() {
	}
	function Divides(a:Number, b:Number):Number {
		return (int(a/b));
	}
	function MiladiToShamsi(YYYY_Miladi:Number, MM_Miladi:Number, DD_Miladi:Number):Array {
		var Month_Miladi:Array = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		var Day_Miladi:Array = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
		var YYYY_Temp_Miladi:Number = int(YYYY_Miladi-1600);
		var Month_Temp_Miladi:Number = int(MM_Miladi-1);
		var Day_Temp_Miladi:Number = int(DD_Miladi-1);
		var DD_Miladi_no:Number = int(int(365)*YYYY_Temp_Miladi+Divides(YYYY_Temp_Miladi+3, 4)-Divides((YYYY_Temp_Miladi+99), 100)+Divides((YYYY_Temp_Miladi+399), 400));
		for (var i = 0; i<Month_Temp_Miladi; ++i) {
			DD_Miladi_no += Month_Miladi[i];
		}
		if (Month_Temp_Miladi>1 && ((YYYY_Temp_Miladi%4 == 0 && YYYY_Temp_Miladi%100 != 0) || (YYYY_Temp_Miladi%400 == 0))) {
			DD_Miladi_no++;
		}
		DD_Miladi_no += Day_Temp_Miladi;
		var Day_Result_Milady:Number = DD_Miladi_no-80-(12-5);
		var Result_Milady:Number = Divides(Day_Result_Milady, 12053);
		Day_Result_Milady = Day_Result_Milady%12053;
		var Year_Result_Milady:Number = 979+33*Result_Milady+4*Divides(Day_Result_Milady, 1461);
		Day_Result_Milady %= 1461;
		if (Day_Result_Milady>=366) {
			Year_Result_Milady += Divides(Day_Result_Milady-1, 365);
			Day_Result_Milady = (Day_Result_Milady-1)%365;
		}
		for (var i = 0; i<11 && Day_Result_Milady>=int(Day_Miladi[i]); ++i) {
			Day_Result_Milady -= Day_Miladi[i];
		}
		var Month_Result_Milady:Number = i+1;
		var day_Result_Milady:Number = Day_Result_Milady+1;
		return new Array(Year_Result_Milady, Month_Result_Milady, day_Result_Milady);
	}
	function ShamsiToMiladi(j_y:Number, j_m:Number, j_d:Number):Array {
		var Month_Miladi:Array = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		var Day_Miladi:Array = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
		var Year_Result_Milady:Number = j_y-979;
		var Month_Result_Milady:Number = j_m-1;
		var day_Result_Milady:Number = j_d-1;
		var Day_Result_Milady:Number = 365*Year_Result_Milady+Divides(Year_Result_Milady, 33)*8+Divides(Year_Result_Milady%33+3, 4);
		for (var i = 0; i<int(Month_Result_Milady); ++i) {
			Day_Result_Milady += Day_Miladi[i];
		}
		Day_Result_Milady += day_Result_Milady;
		var DD_Miladi_no:Number = Day_Result_Milady+80+(12-5);
		var YYYY_Temp_Miladi:Number = 1600+400*Divides(DD_Miladi_no, 146097);
		DD_Miladi_no = DD_Miladi_no%146097;
		var leap:Boolean = true;
		if (DD_Miladi_no>=36525) {
			DD_Miladi_no--;
			YYYY_Temp_Miladi += 100*Divides(DD_Miladi_no, 36524);
			DD_Miladi_no = DD_Miladi_no%36524;
			if (DD_Miladi_no>=365) {
				DD_Miladi_no++;
			} else {
				leap = false;
			}
		}
		YYYY_Temp_Miladi += 4*Divides(DD_Miladi_no, 1461);
		DD_Miladi_no %= 1461;
		if (DD_Miladi_no>=366) {
			leap = false;
			DD_Miladi_no--;
			YYYY_Temp_Miladi += Divides(DD_Miladi_no, 365);
			DD_Miladi_no = DD_Miladi_no%365;
		}
		for (var i = 0; DD_Miladi_no>=Month_Miladi[i]+(i == 1 && leap); i++) {
			DD_Miladi_no -= Month_Miladi[i]+(i == 1 && leap);
		}
		var Month_Temp_Miladi:Number = i+1;
		var Day_Temp_Miladi:Number = DD_Miladi_no+1;
		return new Array(YYYY_Temp_Miladi, Month_Temp_Miladi, Day_Temp_Miladi);
	}
}[/LEFT]
 
آخرین ویرایش:

amir_s

Active Member
ممنون سامان عزیز ( شاید هم سمن ! )

البته دوستی قبلا Component ش رو گذاشته بود ...
ولی خوب ... Class ش بیشتر به درد می خوره .
 

جدیدترین ارسال ها

بالا