اذهب إلى المحتوى

السؤال

نشر

لقد حصلت على كو د جافا سكربت لعمل تاريخ هجري، ولكنني لم افهم اي شي من الكود. 

اتمى احد يقوم بشرح الكود بالتفصيل لنستفيد جميعا 

الكود

<script language="JavaScript">
  var fixd;
function isGregLeapYear(year)
{
  return year%4 == 0 && year%100 != 0 || year%400 == 0;
}

function gregToFixed(year, month, day)
{
  var a = Math.floor((year - 1) / 4);
  var b = Math.floor((year - 1) / 100);
  var c = Math.floor((year - 1) / 400);
  var d = Math.floor((367 * month - 362) / 12);
  if (month <= 2)
    e = 0;
  else if (month > 2 && isGregLeapYear(year))
    e = -1;
  else
    e = -2;
  return 1 - 1 + 365 * (year - 1) + a - b + c + d + e + day;
}
function Hijri(year, month, day)
{
  this.year = year;
  this.month = month;
  this.day = day;
  this.toFixed = hijriToFixed;
  this.toString = hijriToString;
}
function hijriToFixed()
{
  return this.day + Math.ceil(29.5 * (this.month - 1)) + (this.year - 1) * 354 +
    Math.floor((3 + 11 * this.year) / 30) + 227015 - 1;
}
function hijriToString()
{
  var months = new Array("محرم","صفر","ربيع أول","ربيع ثانى","جمادى أول","جمادى ثانى","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة");
  return this.day + " " + months[this.month - 1]+ " " + this.year;
}
function fixedToHijri(f)
{
  var i=new Hijri(1100, 1, 1);
  i.year = Math.floor((30 * (f - 227015) + 10646) / 10631);
  var i2=new Hijri(i.year, 1, 1);
  var m = Math.ceil((f - 29 - i2.toFixed()) / 29.5) + 1;
  i.month = Math.min(m, 12);
  i2.year = i.year;
  i2.month = i.month;
  i2.day = 1;
  i.day = f - i2.toFixed() + 1;
  return i;
}
var tod=new Date();
var weekday=new Array("الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت");
var monthname=new Array("1","2","4","3","5","6","7","8","سبتمبر","12","11","10");
var y = tod.getFullYear();
var m = tod.getMonth();
var d = tod.getDate();
var dow = tod.getDay();
document.write(weekday[dow] + " " + d + " " + monthname[m] + " " + y);
m++;
fixd=gregToFixed(y, m, d);
var h=new Hijri(1421, 11, 28) ;
h = fixedToHijri(fixd);
document.write(" م || " + h.toString() + "هـ");
</script>

 

Recommended Posts

  • 1
نشر

هذا الكود يقوم بتحويل التواريخ من التقويم الميلادي إلى التقويم الهجري وعرضها على الصفحة. سأشرح الكود بالتفصيل من خلال تقسيمه الي وظائف (دوال) :

isGregLeapYear(year): هذه الوظيفة تستخدم للتحقق مما إذا كان العام الميلادي هو سنة كبيسة أم لا. إذا كانت السنة كبيسة، ستعيد true وإلا ستعيد false.

gregToFixed(year, month, day): هذه الوظيفة تقوم بتحويل تاريخ ميلادي إلى عدد ثابت يُمثل اليوم في التقويم الميلادي. تستند الوظيفة إلى مجموعة من الحسابات والتحويلات المعينة.

Hijri(year, month, day): هذه الوظيفة تعرف كائن هجري جديد وتعبئه بالسنة والشهر واليوم المحدد.

hijriToFixed(): هذه الوظيفة تقوم بتحويل تاريخ هجري إلى عدد ثابت يُمثل اليوم في التقويم الهجري.

hijriToString(): هذه الوظيفة تقوم بإعادة تاريخ هجري بصيغة نصية، حيث يتم استخدام مصفوفة months لتمثيل أسماء الشهور.

fixedToHijri(f): هذه الوظيفة تقوم بتحويل العدد الثابت إلى تاريخ هجري.

يتم إنشاء كائن tod من نوع Date للحصول على التاريخ الحالي.

تُعرف مصفوفتين weekday و monthname لتمثيل أسماء أيام الأسبوع وأشهر السنة.

يتم الحصول على العام والشهر واليوم الحالي من كائن tod.

يتم استدعاء الوظيفة gregToFixed لتحويل التاريخ الميلادي إلى عدد ثابت وتخزين النتيجة في متغير fixd.

يتم إنشاء كائن h من نوع Hijri بتاريخ هجري ثابت (1421, 11, 28)، ثم يتم استدعاء الوظيفة fixedToHijri لتحويل العدد الثابت fixd إلى تاريخ هجري وتخزين النتيجة في المتغير h.

يتم عرض التاريخ الميلادي المحدد مع أسماء اليوم والشهر والعام على الصفحة.

يتم عرض التاريخ الهجري المحدد على الصفحة مع "م" (ميلادي) و"هـ" (هجري).

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...