خانه » ادوبی ایر » کلاس تبدیل تاریخ سیستم به هجری شمسی

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

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

با استفاده از این کامپوننت می‌توانید تاریخ سیستم را به صورت هجری شمسی نشان دهید. از این کلاس می‌توانید در پروژهای Action Script 3.0 و Air استفاده کنید. از امکانات این کلاس می‌توان به محاسبه تاریخ امروز سیستم، محاسبه فاصله بین دو تاریخ بر اساس روز، تشخیص کبیسه بودن یا نبودن یک سال و افزودن چند روز به تاریخ مورد نظر و محاسبه تاریخ جدید اشاره کرد.

دانلود :  source.zip

1- ابتدا فایل source.zip را دانلود و سپس آن را extract نمایید.

۲- پوشه ir درون آن را کنار پروژه خود قرار دهید.

۳- در ابتدای کد خود کلاس مربوطه را وارد نمایید.

import ir.flashcenter.persianDate;

۴- حال طبق کدهای مثال در زیر از کلاس  تاریخ شمسی اکشن اسکریپت استفاده نمایید.


import ir.flashcenter.persianDate;

var date = new persianDate();

trace (date.convert_date(“year”));	 // ۱۳۹۰
trace (date.convert_date(“month”));	 // ۴
trace (date.convert_date(“monthName”));	 // تیر
trace (date.convert_date(“day”));	 // ۱۷
trace (date.convert_date(“dayName”));	 // جمعه
trace (date.convert_date(“time”));	 // ۱۵:۵۷:۳۹
trace (date.convert_date(“full”));	 // Array [year, month, day, monthName, dayName, time]

سورس مربوطه به کلاس تاریخ شمسی برای اکشن اسکریپت ۳ :


package ir.flashcenter {
	import flash.display.MovieClip;

	public class persianDate extends MovieClip {

		private var days_for_english:Array = [31,28,31,30,31,30,31,31,30,31,30,31];
		private var days_for_persian:Array = [31,31,31,31,31,31,30,30,30,30,30,29];
		private var mon_name:Array = ["فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"];
		private var day_name:Array = ["یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"];

		public function persianDate() {
			// constructor code
		}
		
		public function isLeapYear(Year:Number):Boolean {
			if ((Year - 3) / 4 is int) {
				return true;
			} else {
				return false;
			}
		}
		
		private function Leap_Effect(year:Number):Number {
			var dayNumber:Number = 0;
			for (var i:Number = year; i >0 ; i--) {
				if (i % 33 == 1 || i%33 == 5 || i % 33 == 9 || i % 33 == 13|| i % 33 == 17 || i % 33 == 22 || i % 33 == 26 || i % 33 == 30) {
					dayNumber++;
				}
			}
			return dayNumber;
		}
		
		public function interval(day1:String, day2:String, mustPositive:Boolean = false):Number {
			var year1:Number = Number((day1).slice(0,4));
			var year2:Number = Number((day2).slice(0,4));
			var mon1:Number = Number((day1).slice(5,7));
			var mon2:Number = Number((day2).slice(5,7));
			var Day1:Number = Number((day1).slice(8,10));
			var Day2:Number = Number((day2).slice(8,10));
			
			var d1Length:Number = Leap_Effect(year1 - 1) + (year1 - 1) * 365;
			
			if (mon1 > 6) {
				d1Length += 186 + ((mon1 - 7) * 30);
			} else {
				d1Length += (mon1 - 1) * 31;
			}
			
			d1Length += Day1;
			
			var d2length:Number = Leap_Effect(year2 - 1) + (year2 - 1) * 365;
			
			if (mon2 > 6) {
				d2length += 186 + ((mon2 - 7) * 30);

			} else {
				d2length += ((mon2 - 1) * 31);
			}
			
			d2length += Day2;
			
			var Length:Number = d2length - d1Length;
			
			if (mustPositive) {
				if (Length < 0) {
					Length *= -1;
				}
			}
			
			return Length;
		}
		
		public function Today(input:String = "array"):* {
			return convert_date(input, 0);
		}
		
		public function appendDaysTo(days:Number, to:String, input:String  = "array"):* {
			var DaysNumber:Number = days;

			DaysNumber += interval(Today("date"), to);
			
			return convert_date(input, DaysNumber);
		}

		public function convert_date(input:String, days:Number):* {
			var persian_date:Array = new Array();
			var date:Date = new Date();
			
			date.setDate(date.getDate() + days);
						
			var english_year:Number = date.getFullYear() - 1600;
			var english_mon:Number = date.getMonth();
			var english_day:Number = date.getDate() - 1;
			
			var day_conversation:Number = Math.floor(365 * english_year + Math.floor((english_year + 3) / 4) - Math.floor((english_year + 99) / 100) + Math.floor((english_year + 399) / 400));

			for (var i:Number = 0; i < english_mon; i++) {
				day_conversation +=  days_for_english[i];
			}

			if (english_mon > 1 && ((english_year % 4 == 0 && english_year % 100 != 0) || (english_year % 400 == 0))) {
				day_conversation +=  1;
			}

			day_conversation +=  english_day;
			var persian_day:Number = day_conversation - 79;
			var persian_np:Number = Math.floor(persian_day / 12053);
			persian_day = persian_day % 12053;
			var persian_year:Number = 979+ 33 * persian_np + 4 * Math.floor(persian_day / 1461);
			persian_day %=  1461;

			if (persian_day >= 366) {
				persian_year += Math.floor((persian_day - 1) / 365);
				persian_day = (persian_day - 1) % 365;
			}

			for (var j:Number = 0; j < 11 && persian_day >= int(days_for_persian[j]); j++) {
				persian_day -=  days_for_persian[j];
			}
			
			var persian_mon:Number = j + 1;
			persian_day += 1;
			
			var time:String = String(date.getHours()) + ":" + String(date.getMinutes()) + ":" + String(date.getSeconds());
			
			persian_date = [persian_year, persian_mon, persian_day, mon_name[persian_mon - 1], day_name[date.getDay()], time];
			
			switch (input) {
				case "year":
				return persian_year;
				break;
				case "month":
				return persian_mon;
				break;
				case "day":
				return persian_day;
				break;
				case "monthName":
				return mon_name[persian_mon - 1];
				break;
				case "dayName":
				return day_name[date.getDay()];
				break;
				case "time":
				return time;
				break;
				case "date":
				var pMonth:String;
				if (persian_mon < 10) {
					pMonth = "0" + String(persian_mon);
				} else {
					pMonth = String(persian_mon);
				}
				var pDay:String;
				if (persian_day < 10) {
					pDay = "0" + String(persian_day);
				} else {
					pDay = String(persian_day);
				}
				var now:String = String(persian_year) + "/" + pMonth + "/" + pDay;
				return now;
				case "array":
				return persian_date;
				break;
			}

		}

	}
}

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

14 نظر

  1. سلام آقا بهروز خسته نباشین
    لطفا راهنمایی کنین که با این ابزار چطوری میشه سن رو محاسبه کرد؟
    با تشکر

    • سلام
      سال جاری را دریافت کنید و به شمسی تبدیل کنید
      سال تاریخ تولد اگر شمسی نیست تبدیل کنید
      سال ها را از هم کم کنید
      برای دقت بالا می بایست از کلاس های timestamp استفاده کنید و هر دو تاریخ را به یک عدد تبدیل کنید و از هم کم کنید و دوباره عدد را به تاریخ برگردانید
      موفق و پیروز باشید

  2. با سلام
    معمولا دو تاریخ رو میشه به روز تبدیل و حاصل تفریق این دو عدد رو بر ۳۶۵ تقسیم کنیم که عدده اعشاری در میاد مثلا۳۲.۵
    چطوری میشه عدد حاصل رو به فرمت تاریخ تبدیل کرد؟ ۳۲/۰۶/۰۱ سی دو سال و شش ماه و یک روز
    یک نمونه براتون ارسال کردم که خطا داره !!! اگه زحمت نیست بررسی بفرمایین
    خیلی ممنون

    • سلام
      می بایست هر دو را به timestamp تبدیل کنید و از هم کم کرده و یا … سپس عدد به دست آمده را دوباره به تاریخ تبدیل کنید
      اگر تاریخ شمسی هست به میلادی تبدیل و سپس مراحل بالا را انجام دهید و دوباره به شمسی تغییر دهید
      موفق و پیروز باشید

  3. محمدحسن رمضانیان

    سلام فایل persianDate.zip رو که دانلود می کنم بجز یک فایل با نام PersianDate.as درونش وجود ندارد خودتون امتحان

    کنید.

    و اینکه آیا کامپوننتی و یا کدی هست که تاریخ سیستم رو به هجری قمری تبدیل کند.

  4. مطلب طبق سورس کلاس تاریخ شمسی به روز شد.

  5. سلام آقا بهروز خسته نباشید.
    اگه زحمت نیست کاملترین کامپوننت و یا آموزش تبدیل تبدیل تاریخ میلادی به شمسی و … در AS2 رو معرفی کنین.
    من از کامپوننت Shamsidate جعبه ابزار استفاده می کنم که یک مشکل داره و زیاد قابل تغییر نیست.
    ممنون و متشکر

    • سلام
      در مورد as2 کلاس های زیادی هست اگر جستجو کنید ولی اکثرا در سالهای کبیسه مشکل دارند فکر می کنم در انجمن مجید آنلاین اگر جستجو کنید قبلا نمونه هایی قرار داده بودم
      البته هم اکنون در درسترس ندارم
      موفق و پیروز باشید

  6. مجتبی آرادمهر

    سلام ، ممنون از زحماتتون
    اررور میده Access of undefined property date.
    ای کاش یک مثال جامع هم میذاشتید ، یه مثال که تمام ویژگی هاشو نشون بده
    بازم ممنون

    • سلام و عرض ادب

      اول این که date را تعریف کنید،
      var date = new persianDate();

      در ضمن برای دسترسی به تابع convert_date فایل کلاس مربوطه بخش private function convert_date بخش private را به public تغییر دهید.

      موفق و پیروز باشید

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه