الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كود فلكى خطير للتحويل من التاريخ الميلادى إلى التاريخ الهجرى

مغلق
بدأه dark blood في 10 أغسطس 2003 · 6 رد · 1,424 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

يستخدم هذا الكود للتحويل من التاريخ الميلادى إلى التاريخ الهجرى بدقة متناهية .. فهذا الكود بقوم بإعطاء التاريخ الهجرى صحيح فلكيا 100% و قد وفقت بحمد الله برمجة هذا الكود بعد مجهود لا يمكن وصفه لذلك أرجو من كل من يستخدم هذا الكود أو يستخدم المعادلات الرياضية لهذا الكود مع اى لغة برمجة أن يقوم بذكرالمصدر الرئيسى ضمن الكود و هذا هو الكود بلغة الـPHP و إن شاء الله سوف اقوم بكتابة الكود بالعديد من لغات البرمجة الأخرى

و لقد توصلت بفضل هذا الكود لمجموعة من المعلومات الفلكية ما كان يمكن لى ابدا ان اعرفها سابقا .. مثل العلاقة الحقيقية بين السنه الميلادية و الهجرية فقد كنت اظن ان السنة الهجرية أقل من السنة الميلادية بـ 11 يوم و لكن اتضح لى الان ان هذا خطأ.

ملاحظة : لقد قمت بإختبار هذا الكود على فترة زمنية تقدر بحوالى 4000 عام و الحمد الله النتائج صحيحة 100%

الكود من على موقع الـPHP.NET

http://www.php.net/manual/de/ref.datetime.php

منقول من vbzoom(gift)

#2

جزاك الله الف خير

تحياتي ايفو ;)

#3

هذا واجبنا;)

#4

يا لك من خطير

#5
dark blood كتب:
فقد كنت اظن ان السنة الهجرية أقل من السنة الميلادية بـ 11 يوم و لكن اتضح لى الان ان هذا خطأ.

كلنا نفهم بان السنة الهجرية اقل من السنة الميلادية في الحسبة، فاذا كان يوجد خلاف ذلك فارجو الايضاح للفائده؟ او تقصد المدة تزيد اوتنقص عن 11 يوم في السنة!، وشكرا على المجهود الذي بذل لاعداد هذا البرنامج.

#6

السلام عليكم

الأخ dark blood .. لقد دخلت على الموقع ولم أعرف أي كود بالضبط تتحدث عنه ولكن لفت نظري دالة تحويل باسم arabicDate .

فإذا هي المقصودة فقط قمت بتحويلها للـ VB :

Function JulGreg2Hijri(ByVal y As Integer, _
                    ByVal m As Byte, _
                    ByVal d As Byte) As String
  Dim jd As Long
  Dim l As Long
  Dim n As Integer
  Dim j As Integer
  
  If y = 1582 And m = 10 Then
    If d >= 5 And d <= 14 Then
      JulGreg2Hijri = "Wrong entry"
      Exit Function
    End If
  End If
  
  If y > 1582 Or (y = 1582 And m > 10) Or (y = 1582 And m = 10 And d > 14) Then
    jd = ard_int((CLng(1461) * (y + 4800 + ard_int((m - 14) / 12))) / 4)
    jd = jd + (ard_int((367 * (m - 2 - 12 * (ard_int((m - 14) / 12)))) / 12))
    jd = jd - (ard_int((3 * (ard_int((y + 4900 + ard_int((m - 14) / 12)) / 100))) / 4))
    jd = jd + (d - 32075)
  Else
    jd = CLng(367) * y - ard_int((7 * (y + 5001 + ard_int((m - 9) / 7))) / 4) + ard_int((275 * m) / 9) + d + 1729777
  End If
  
  l = jd - 1948440 + 10632
  n = ard_int((l - 1) / 10631)
  l = l - CLng(10631) * n + 355   '// Correction: 355 instead of 354
  j = (ard_int((10985 - l) / 5316)) * (ard_int((50 * l) / 17719)) + (ard_int(l / 5670)) * (ard_int((43 * l) / 15238))
  l = l - (ard_int((30 - j) / 15)) * (ard_int((CLng(17719) * j) / 50)) - (ard_int(j / 16)) * (ard_int((CLng(15238) * j) / 43)) + 29
  m = ard_int((24 * l) / 709)
  d = l - ard_int((709 * m) / 24)
  y = 30 * n + j - 30

  JulGreg2Hijri = d & "/" & m & "/" & y
End Function

Sub test()
  Dim K As Byte
  For K = 4 To 15
    MsgBox CDate(DateSerial(1582, 10, K)) & Chr(13) & JulGreg2Hijri(1582, 10, K)
  Next K
End Sub

علما أني أضفت إضافة بسيطة لفحص صحة التاريخ المدخل حيث الدالة تعمل للتاريخ الدولي أي اليولياني و الجريجوري . وأعتقد أن أكثر لغات البرمجة لا تستخدم هذا التاريخ بل تستخدم الجريجوري فقط حيث لا وجود لمسألة عشرة الأيام لشهر أكتوبر 1582م .

كما أود أن ألفت الانتباه وذلك أيضا لو كانت هذه الدالة هي المقصودة فأن هذا الهجري ليس هجريا فلكيا بل يسمى هجري قياسي . أما الفلكي فهو كالتقاويم المستخدمة بالسعودية والكويت وقطر .

تحياتي .

تم تعديل هذه المشاركة بواسطة أبو هادي في 2 سبتمبر 2003 في 14:57

#7

شكرا لكم جزيلا و للاخ ابو هادي للتوضيح

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…