۱-فرمی را ایجاد می کنید شامل ۷ باتن در بالا یا بغل با نام گذاری در ویژگی کپشن آنها البته از سمت راست به چپ شامل : شنبه ، یکشنبه ، ... و جمعه
۲-اگر روزیکم ماهی از یکسالی جمعه باشد در نتیجه باید طبق تصویر زیر ۵ ردیف ۷ تایی باتن یا لیبل داشته باشید
۳-کنترل کمبو باکس یا لیست باکسی ایجاد کنید که سال ها و نام ماه ها در آن فهرست شوند چرا که باتوجه به سال و ماه انتخابی کنترل ها یا لیبل های ایجاد شده در مرحله ۲ پر خواهندشد.
-نحوه پرشدن یا Filling : باید مشخص کنید ، اولِ هرماه چه روزی در هفته است >> شنبه ، یکشنبه و یا جمعه ، سپس در اولین ردیف در ستون شنبه تا جمعه نسبت به قرار دادن اعداد یک تا ۳۰ یا ۳۱ با توجه به ماه انتخابی اقدام کنید.
در تصویر اول فروردین ۷۱ روز شنبه است و چون فروردین ۳۱ روزه است از لیبل ۱ تا ۳۵ اعداد یک تا سی و یک در کپشن کنترل ها قرار گرفته خواهندشد.
اختلاف روزهای بین دو تاریخ ۱/۱/۱ (جمعه) تا ۱۳۷۱/۱/۱ (شنبه) عدد ۵۰۰۳۸۳ روز است می توانید در آدرس اینترنتی >>باحساب<< این مقدار را بدست آورید.
اگر فرض شود که یکم جمعه باشدو ماه ۳۱ روزه ، باید از باکس یا لیبل ۷ شروع به پر کردن اعداد ۱ تا ۳۱ کنیم :
این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) میباشد.
In Memory Of
<<فقط جهت مطالعه>>
برای صِحَّت و سُقم فرمول اعمال شده در مطالب زیرین لازم است با موارد خیلی بیشتری مورد آزمون قرار گیرد در نتیجه فقط جهت مطالعه قرار داده شده !!! . اعمال آن در برنامه ها به اختیار مجری است ولی توصیه به استفاده نمی شود.برای درآورن اختلاف دو تاریخ یا اضافه کردن تعداد روزهایی به تاریخ مد نظر می بایست سال های کبیسه از تاریخ مبنا تا تاریخ درخواستی اعمال گردد تا تاریخ دقیقی بدست آید.
در ابتدا و پایان محاسبات در متن به اختلاف یک تا چند روز در سال های بزرگتر و فاصله دار طبق این روش پی خواهید برد.پس باماباشید
برای سالهای ۱۲۴۴ تا ۱۳۴۲ چنانچه باقیماندهٔ حاصل تقسیم سال مورد نظر بر عدد ۳۳، یکی از اعداد (۱، ۵، ۹، ۱۳، ۱۷، ۲۱، ۲۶ و ۳۰) باشد آن سال کبیسه خواهد بود. و برای سالهای اخیر (سالهای ۱۳۴۳ تا ۱۴۷۲)، بهجای ۲۱، باقیماندهٔ ۲۲ ملاک خواهد بود.
گاهشماری جلالی با حفظ سرآغاز و طول سال با تغییر مبدأ، اسامی و طول ماهها در قالب گاهشماری هجری شمسی برجی درآمده و باز با تغییراتی در طول ماهها ضمن تنوع اسامی آنها، عنوان تقویم هجری شمسی پیدا کرد.
این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) میباشد.
بر اساس محاسبات مرکز تقویم مؤسسهٔ ژئوفیزیک دانشگاه تهران که مرجع رسمی تقویم ایران است، از سال ۱۲۰۶ تا ۱۴۹۸ هجری شمسی این سالها کبیسه بودهاند یا خواهند بود:[۱۵]
۱۲۱۰، ۱۲۱۴، ۱۲۱۸، ۱۲۲۲، ۱۲۲۶، ۱۲۳۰، ۱۲۳۴، ۱۲۳۸، ۱۲۴۳
(۳۳ساله)، ۱۲۴۷، ۱۲۵۱، ۱۲۵۵، ۱۲۵۹، ۱۲۶۳، ۱۲۶۷، ۱۲۷۱، ۱۲۷۶
(۳۳ساله)، ۱۲۸۰، ۱۲۸۴، ۱۲۸۸، ۱۲۹۲، ۱۲۹۶، ۱۳۰۰، ۱۳۰۴، ۱۳۰۹
(۳۳ساله)، ۱۳۱۳، ۱۳۱۷، ۱۳۲۱، ۱۳۲۵، ۱۳۲۹، ۱۳۳۳، ۱۳۳۷، ۱۳۴۲
(۳۳ساله)، ۱۳۴۶، ۱۳۵۰، ۱۳۵۴، ۱۳۵۸، ۱۳۶۲، ۱۳۶۶، ۱۳۷۰، ۱۳۷۵
(۳۳ساله)، ۱۳۷۹، ۱۳۸۳، ۱۳۸۷، ۱۳۹۱، ۱۳۹۵، ۱۳۹۹، ۱۴۰۳، ۱۴۰۸
(۳۳ساله)، ۱۴۱۲، ۱۴۱۶، ۱۴۲۰، ۱۴۲۴، ۱۴۲۸، ۱۴۳۲، ۱۴۳۶، ۱۴۴۱
(۳۳ساله)، ۱۴۴۵، ۱۴۴۹، ۱۴۵۳، ۱۴۵۷، ۱۴۶۱، ۱۴۶۵، ۱۴۶۹، ۱۴۷۴
(۳۳ساله)، ۱۴۷۸، ۱۴۸۲، ۱۴۸۶، ۱۴۹۰، ۱۴۹۴، و ۱۴۹۸.
طبق جدول عددی فوق اگر در باقیمانده تقسیم سال حسابی موردنظر بر عدد ۱۲۸ (میاندوره متوالی) یکی از اعداد جدول فوق باقی مانده باشند آن سال کبیسه خواهد بود. با این تفاوت که برای سالهای ۱ تا ۴۷۳ هجری خورشیدی حسابی اعداد اصلاح شده داخل (دوکمان) که یک شماره بیشتر نسبت به عدد همجوار آن است بهجای آن به عنوان باقی مانده ملاک خواهد بود (بعلت شکاف بین دو دوره بزرگ).
سرآغاز گاهشماری هجری خورشیدی روز جمعه «۱ فروردین سال ۱ هجری خورشیدی» (۲۹ شعبان ۱ سال پیش از هجرت) برابر با ۱۹ مارس ۶۲۲ میلادی قدیم (ژولینی) و ۲۲ مارس ۶۲۲ میلادی جدید (گرگوری) است.[۳] البته روز اول سال یک هجری خورشیدی (از ۱ فروردین تا ۲۴ شهریور) ۵ ماه و ۲۴ روز پیش از هجرت محمد (کمتر از یک سال) است.
در تقویم میلادی نو سالهایی که بر ۴ بخشپذیر باشند (باقیماندهٔ تقسیم آن سال بر ۴ برابر ۰ باشد) کبیسه هستند با این استثنا که از میان سالهایی که بر ۱۰۰ بخشپذیرند (سالهای انتهای سده)، تنها آنهایی که بر ۴۰۰ نیز بخشپذیرند کبیسه هستند.
Year | Year | Year | Year | Year |
---|---|---|---|---|
1600 | 1696 | 1796 | 1896 | 1996 |
1604 | 1704 | 1804 | 1904 | 2000 |
1608 | 1708 | 1808 | 1908 | 2004 |
1612 | 1712 | 1812 | 1912 | 2008 |
1616 | 1716 | 1816 | 1916 | 2012 |
1620 | 1720 | 1820 | 1920 | 2016 |
1624 | 1724 | 1824 | 1924 | 2020 |
1628 | 1728 | 1828 | 1928 | 2024 |
1632 | 1732 | 1832 | 1932 | 2028 |
1636 | 1736 | 1836 | 1936 | 2032 |
1640 | 1740 | 1840 | 1940 | 2036 |
1644 | 1744 | 1844 | 1944 | 2040 |
1648 | 1748 | 1848 | 1948 | 2044 |
1652 | 1752 | 1852 | 1952 | 2048 |
1656 | 1756 | 1856 | 1956 | 2052 |
1660 | 1760 | 1860 | 1960 | 2056 |
1664 | 1764 | 1864 | 1964 | 2060 |
1668 | 1768 | 1868 | 1968 | 2064 |
1672 | 1772 | 1872 | 1972 | 2068 |
1676 | 1776 | 1876 | 1976 | 2072 |
1680 | 1780 | 1880 | 1980 | 2076 |
1684 | 1784 | 1884 | 1984 | 2080 |
1688 | 1788 | 1888 | 1988 | 2084 |
1692 | 1792 | 1892 | 1992 | 2088 |
- | - | - | - | 2092 |
- | - | - | - | 2096 |
Note: 2100 will not be a leap year.
روش زیر برای تبدیل تاریخ میلادی به شمسی ثابت شده نیست ولی با کمک تابع DateDiff در اکسس می توان تا حدی به جواب نزدیک رسید مثال هایی در زیر برای درک بیشتر آورده ایم :
این مطلب برای اشخاصی است که بخواهند بدون اثبات علمی به نتیجه خیلی نزدیک برسند ( مشخص کردن تاریخ شمسی و میلادی مبنا و بدست آوردن معادل های آنها ) ... مثال های زیر خوانده شود اینجا کد نویسی آموزش داده نمی شود فقط روش برای افرادی که می توانند کد نویسی نُمایند !!! ... کد آماده در وب موجود است شما عزیزان دل می توانید Google Search کنید . توابع اکسس ( DateDiff و DateAdd ) هم به یاری شما خواهند آمد احتیاجی به کد نویسی اضافه نخواهید داشت.شاد و پیروز باشید.
تبدیل تاریخ میلادی به شمسی : ( اختلاف یک تا چند روز)
مبنای میلادی : 1/1/1922
مبنای شمسی :1300/10/11
روز هفته : یکشنبه
در مثال زیر اختلاف ۴ روز بدست آمد .
MM/DD/YYYY
1/1/2500
SELECT DateDiff("d", #01/01/1922#, #1/1/2500#)=211111
211111\365.25=577+1300=1877
211111-577×365.25=361.75~362
سال ۱۸۷۷ کبیسه نیست
362+11-30-30-29=284
یک عدد به عدد سال اضافه می شود
284-6×31-3×30=8
نتیجه باید 1878/10/12 باشد ولی روز را ۸ بدست آوردیم !!! اختلافی در حدود ۴ روز
پس متوجه شدید که عدد ۳۶۵.۲۵ که در یکسری سایت ها بیان شده قابل اطمینان نمی باشد.
MM/DD/YYYY
2/18/2102
SELECT DateDiff("d", #01/01/1922#, #2/18/2102#)=65792
65792\365.25=180+1300=1480
65792-180×365.25=47
47+11-30=28??? 29 is True
اختلاف یکروز
نتیجه : شنبه 1480/11/29
۶+۱=۷(۱ Sunday On 1922)
saturday=۷
MM/DD/YYYY
3/20/2999
SELECT DateDiff("d", #01/01/1922#, #3/20/2999#)=393445
393445\365.25=1077+1300=2377
393445-1077×365.25=70.75~71
71+11-30-30=22???? 30 is True
اختلاف ۸ روز !!!
نتیجه : 2377/12/30
-فرض کنید تاریخ 2000/02/28 باشد
نتیجه : دوشنبه 1378/12/09
SELECT DateDiff("d", #01/01/1922#, #02/28/2000#)=28547
28547\365.25=78
28547-78×365.25=57.5~58
58-(30-11)-30=9
۱+۱=۲
-فرض کنید ، تاریخ 2012/05/23 باشد :
نتیجه : چهارشنبه 1391/03/03
SELECT DateDiff("d", #01/01/1922#, #05/23/2012#)=33015
33015\365.25=90
33015-90×365.25=142.5~143
سال 90 کبیسه نیست
143-(30-11)-30-29=65
ورود به سال جدید >>> 91
65-31-31=3
۳+۱=۴(۱ sunday on 1922)
-فرض کنید تاریخ ، 1978/12/23 باشد :
نتیجه : شنبه 1357/10/2
SELECT DateDiff("d", #01/01/1922#, #12/23/1978#)=20810
20810\365.25=56
20810-56×365.25=356
سال 56 کبیسه نیست
356-(30-11)-30-29=278
ورود به سال جدید >>> 57
278-6×31-30-30-30=2
57×365.2523-11+2=20810.3811
۶+۱=۷(۱ sunday on 1922)
-فرض کنید تاریخ ، 1978/09/11 باشد :
Diff=20203
1+1=2(1 Sunday on 1922)
نتیجه : دوشنبه 1357/06/20
-فرض کنید تاریخ ، 2005/03/20 باشد :
نتیجه : یکشنبه 1383/12/30
SELECT DateDiff("d", #01/01/1922#, #03/20/2005#)=30394
30394\365.25=83
30394-83×365.25=78.25~79
سال 83 کبیسه است.اسفند ۳۰ روزه در نظر گرفته می شود.
79-(30-11)-30=30
۰+۱=۱(۱ sunday on 1922)
MM/DD/YYYY
10/03/2004
SELECT DateDiff("d", #01/01/1922#, #10/03/2004#);=30226
Never do following
--2004-1922=82
--82×365.25=29950.5
--29950.5+30+28+31+30+31+30+31+31
+30+3=30225.5~30226
30226\365.25=82
30226-82×365.25=275.5~276
سال 82 کبیسه نیست
276+11-30-30-29=198
یک عدد به عدد سال اضافه می شود : 83
198-31-31-31-31-31-31=12
نتیجه : یکشنبه ۱۳۸۳/۰۷/۱۲
۰+۱=۱(۱ sunday on 1922)
-فرض کنید تاریخ ، 2017/03/19 باشد :
نتیجه : یکشنبه 1395/12/29
Diff : 34776
---2017-1922=95
--95×365.25+31+28+19-1=34775.75~34776
34776\365.25=95
34776-95×365.25=77.25~78(Round-Up)
سال ۹۵ کبیسه است لذا ماه ۱۲ در محاسبات و کسر از Diff در جایی که نیاز است ۳۰ روزه اعمال می گردد.
78+11-30-30=29
۰+۱=۱(۱ sunday on 1922)
-فرض کنید تاریخ ، 2017/03/21 باشد :
نتیجه : سه شنبه 1396/01/01
SELECT DateDiff("d", #01/01/1922#, #03/21/2017#)=34778
34778\365.25=95
34778-95×365.25=79.25~80
سال ۹۵ کبیسه است.و ماه اسفند ۳۰ روزه در نظر گرفته می شود.
80-(30-11)-30-30=1
ورود به سال جدید 96
۲+۱=۳(۱ sunday on 1922)
SELECT DateDiff("d", #01/01/1922#, #03/20/2017#)=34777
34777\365.25=95
34777-95×365.25=78.25~79
سال ۹۵ کبیسه است.
79-(30-11)-30=30
۱+۱=۲(۱ Sunday on 1922)
نتیجه : دوشنبه 1395/12/30
SELECT DateDiff("d", #01/01/1922#, #03/17/2017#)=34774
34774\365.25=95
34774-95×365.25=75.25~76
سال ۹۵ کبیسه است.
76-(30-11)-30=27
نتیجه : جمعه 1395/12/27
۵+۱=۶(۱ sunday on 1922)
-فرض کنید تاریخ ، 2017/06/01 باشد :
Diff=34850
نتیجه : پنج شنبه 1396/3/11
۴+۱=۵(۱ Sunday On 1922)
-تاریخ مبنای میلادی : اول ژانویه 1922
-برگردان شمسی : 11 دی 1300
SELECT DateDiff("d", #01/01/1922#, #01/02/2000#)=28490
28490\365.25=78
28490-78×365.25=0.5~1
1300+78/10/11+1=1378/10/12
۰+۱=۱(۱ Sunday 1922)
-فرض کنید تاریخ ، 2013/04/01 باشد :
نتیجه : دوشنبه 1392/01/12
SELECT DateDiff("d", #01/01/1922#, #04/01/2013#)=33328
33328\365.25=91
33328-91×365.25=90.25~91
سال 91 کبیسه است در نتیجه ماه اسفند ۳۰ روزه در نظر گرفته می شود.
91-(30-11)-30-30=12
چون باقیمانده دارد پس یک عدد به سال اضافه می شود یعنی 1392
۱+۱=۲(۱ Sunday On 1922)
-فرض کنید تاریخ ، 2012/03/20 باشد :
نتیجه : سه شنبه 1391/01/01
SELECT DateDiff("d", #01/01/1922#, #03/20/2012#)=32951
32951\365.25=90
32951-90×365.25=78.5~79
سال 90 کبیسه نیست و ماه اسفند۲۹ روزه است.
79-(30-11)-30-29=1
یک عدد به عدد سال اضافه می کنیم
1391
۲+۱=۳(۱ Sunday On 1922)
-فرض کنید تاریخ ، 2023/06/23 باشد :
نتیجه : جمعه 1402/04/02
SELECT DateDiff("d", #01/01/1922#, #06/23/2023#)=37063
37063\365.25=101=1300+101=1401
37063-101×365.25=172.75~173
سال 1401 کبیسه نیست ( مبنا ۱۳۰۰/۱۰/۱۱ )
173-(30-11)-30-29=95
یک عدد بعدد سال اضافه میشود 1402
95-31-31-31=2
۵+۱=۶(۱ Sunday On 1922)
SELECT DateDiff("d", #01/01/1922#, #12/30/2016#)=34697
34697\365.25=94
34697-94×365.25=363.5~364
364-(30-11)-30-29=286
Year=Year+1=94+1=95
286-6×31-30-30-30=10
نتیجه : جمعه 1395/10/10
۵+۱=۶(۱ Sunday On 1922)
SELECT DateDiff("d", #01/01/1922#, #8/30/2020#)=36036
36036\365.25=98
36036-98×365.25=241.5~242
سال 98 کبیسه نیست.
242-(30-11)-30-29=164
Year=Year+1=98+1=99
164-5×31=9
نتیجه : یکشنبه 1399/06/09
۰+۱(۱ Sunday On 1922)
SELECT DateDiff("d", #01/01/1922#, #11/22/2014#)=33928
33928\365.25=92
33928-92×365.25=325
سال 92 کبیسه نیست.
325-(30-11)-30-29=247
Year=Year+1=92+1=93
247-6×31-30-30=1
نتیجه : شنبه 1393/09/01
۶+۱(۱ Sunday On 1922)
SELECT DateDiff("d", #01/01/1922#, #1/31/2024#)=37285
---2024-1922=102
---102×365.25+31-1=37285.5
37285\365.25=102(1300+102=1402)
37285-102×365.25=29.5~30
سال 1402 کبیسه نیست.
30-(30-11)=11
نتیجه : چهارشنبه 1402/11/11
۳+۱=۴(۱ Sunday On 1922)
برگردان شمسی به میلادی ( طبق تاریخ شمسی مبنا ) ... نیازمند آزمون و خطاست با چک کردن موارد بیشتر
1,402−1,300=102
102×365.25+30+11−11=37285.5
SELECT DateAdd("d",37285, #01/01/1922#);=1/31/2024
MM/DD/YYYY
01/01/1964
SELECT DateDiff("d", #01/01/1922#, #1/1/1964#)=15340
15340\365.25=41
15340-41×365.25=364.75~365
سال 41 کبیسه نیست.
365-30-30-29-6×31-3×30+11=11
Year=Year+1=1341+1=1342
Month:10,11,12,1...6,7..9,10
نتیجه : چهارشنبه 1342/10/11
۳+۱=۴(۱ Sunday On 1922)
MM/DD/YYYY
03/20/1964
SELECT DateDiff("d", #01/01/1922#, #3/20/1964#)=15419
15419\365.25=42
15419-42×365.25=78.5~79
42:Kabiseh
79+11-30-30=30
Month:10,11,12
نتیجه : جمعه 1342/12/30
۵+۱=۶(۱ Sunday On 1922)
SELECT DateDiff("d", #01/01/1922#, #2/24/1964#)=15394
15394\365.25=42
15394-42×365.25=53.5~54
سال 42 کبیسه است.
54+11-30-30=5
Month:10,11,12
نتیجه : دوشنبه 1342/12/05
۱+۱=۲(۱ Sunday On 1922)
SELECT DateDiff("d", #01/01/1922#, #7/20/1964#);=15541
15541\365.25=42
15541-42×365.25=200.5~201
سال 42 کبیسه است
201+11-30-30-30=122
یک عدد به عدد سال اضافه می شود.
42+1=43
122-31-31-31=29
1+1=2(1 sunday on 1/1/1922)
نتیجه دوشنبه 1343/04/29
MM/DD/YYYY
11/5/1996
-DateDiff :
1996-1922=74
74×365.25=27028.5~27029
27029+(31-1)+28+31+30+31+30+31+31+30+31+5=27337
Or
27029+31+28+31+30+31+30+31+31+30
+31+5-1=27337
-Convert to Jalali :
27337\365.25=74
27337-74×365.25=308.5~309
سال ۷۴ کبیسه نیست در نتیجه اسفند ماه ۲۹ روزه است
309+11-30-30-29=231
Month:10,11,12
231-6×31-30=15
Month:1....6,7,8(Aban)
Year=Year+1=74+1=75
1+2=3(1 sunday on 1/1/1922)
نتیجه : سه شنبه ۱۳۷۵/۰۸/۱۵
1/1/1940
SELECT DateDiff("d", #01/01/1922#, #1/1/1940#);=6574
6574\365.25=17
6574-17×365.25=364.75~365
سال ۱۳۱۷ کبیسه است در نتیجه ماه اسفند ۳۰ روزه در نظر گرفته می شود.
365+11-30-30-30=286
یک عدد به عدد سال اضافه می شود : 1318
286-6×31-3×30=10
نتیجه : دوشنبه ۱۳۱۸/۱۰/۱۰
۱+۱=۲(۱ Sunday On 1922)
اکثرا دنبال این هستیم ( حتی خود بنده ) که بتوانیم به راحتی و در کوتاهترین زمان کد نویسی ، معادل شمسی تاریخ میلادی روز را بدست آوریم محاسبات بالا کوتاهترین راه ممکن را به نمایش در آورده ( دقیق بودن مطلب فوق باید با بررسی تاریخ های بیشتر در سال کبیسه یا غیر کبیسه مورد آزمون قرار گیرد ) . معادله بالا برای کسانیکه میخواهند یاد بگیرند که چگونه تاریخ شمسی روز را در فرم اصلی نمایش دهند مفید خواهد بود.
روش کار :
۱-در نظر گرفتن یک تاریخ میلادی و شمسی بعنوان پایه و مبنا
1922/01/01 Miladi
1300/10/11 Jalali
۲-با تابع DateDiff در اکسس تعداد روزهای بین دو تاریخ میلادی مبنا ( 1922/01/01 ) و تاریخ میلادی مورد نظر که باید تبدیل شود را استخراج می کنیم.
۳-Diff یا اختلاف روزهای دو تاریخ میلادی گفته شده در مورد ۲ را بر 365.25 تقسیم و عدد صحیح آن را بعنوان سال مورد نظر بصورت موقت در متغیری ذخیره می کنیم.
۴-عدد صحیحِ حاصل از تفریق دو عدد Diff و مورد ۳ در 365.25 ، عددی است که باید به روز و ماه شمسی مبنا ( 10/11 ... یازده دی ) اضافه یا Add گردد.( عدد تا یک عدد بالاتررُند شود: اگر اعشار داشت اعشار حذف و یک رقم به عدد صحیح اضافه شود با توابع Fix و Abs و Int هم می توان کار را پیش برد)
۵-چنانچه سال فرضی یا موقت در مورد ۳ ، کبیسه بود اسفندماه برای کسر از عدد Diff ، سی روزه در نظر گرفته می شود.
بطور مثال اگر سال موقت ۹۵ بدست آمد و قرار شد 102 روز به تاریخ مبنا ( غیر از در نظر گرفتن سال ) اضافه شود داریم :
Mah 10 : (30-11)=19
Mah 11 : 30
Mah 12 : 30 ( 95>>Kabiseh)
19+30+30=79
عدد 102 از 79 بیشتر است لذا یک عدد به سال اضافه شده و سال واقعی 96 خواهد بود.
102-79=23
چون عدد مانده 23 روز و کمتر از یکماه است لذا در ماه اول قرار داریم و ماه و روز به ترتیب 1 و 23 خواهد شد.
۶-اختلاف اول ژانویه تا آخر اسفند برای سال کبیسه 79 و سال غیر کبیسه 78 روز است البته اول ژانویه ای هم داریم که معادل ۱۲ دیماه است پس این دوعدد گفته شده کاملا Reliable برای شما نیست بدلیل اینکه اول ژانویه می تواند در ۱۲ دی ماه بیافتد.
-به ساخت توابعی چون زیر نیاز است :
--تابع M_DAY برای مشخص نمودن تعداد روزهای ماه های شمسی و دارای دو آرگومان سال و ماه : سال برای مشخص نمودن کبیسه
Select Case M
Case 1 To 6:D=31:Case 7 To 11:D=30:Case 12:D=iif(Kabiseh(S)=True,30,29):End Select
--نوشتن تابع کبیسه : در بالا توضیح داده شده که برای سال های 1300 که مبنای ما است تا ... و 1343 تا 1472 چطور باید محاسبه گردد.
--عدد Diff تا یکرقم رُند شود.
--تابعی برای کسرروزهای ماه ها از عدد Diff بدست آمده در مورد ۲ :
۱-اضافه کردن عدد ۱۱ ( ماه ۱۰ : شمسی مبنا) به عدد Diff
2-لوپ تا زمانیکه Diff عدد مثبتی بدست آید ادامه پیدا خواهد کرد.
3- کسر تعداد روزهای هرماه ( از 10 ببعد ) از عدد Diff.
نکته :بعد ازانجام هر کسری باید یک عدد به M که معرف ماه است اضافه شود اگر M بزرگتر از ۱۲ شد M دوباره یک شود و به سال هم یک عدد اضافه شود
مثال :
M=10
S=92
Diff=325
325+11=336
---Loop :
336-(M:10)30=306
M=M+1=11
M>12 : False
306-(M:11)30=276
M=M+1=12
M>12 : False
276-(M:12)(S:92:Kabiseh=0)29=247
M=M+1=13
M>12 : True>>>M=1>>>S=S+1=93
247-(M:1)31=216
.
.
.
M=M+1=8
M>12 : False
31-(M:8)30=1
M=M+1
1-(M:9)30=-29>0 : False
---End Loop
MM/DD/YYYY
08/18/2020
SELECT DateDiff("d", #01/01/1922#, #8/18/2020#);=36024
Leap_years_in_the_Gregorian_calendar
--2020-1922=98
--98×365.25+31+28+31+30+31+30+31-1=36023.5~36024
36024\365.25=98
36024-98×365.25=229.5~230
سال ۹۸ کبیسه نیست بنابراین ماه اسفند ۲۹ روزه در نظر گرفته می شود.
230+11-30-30-29=152
در اینجا یکسال به سال 98 اضافه می شود
152-31-31-31-31=28
1+2=3(1 sunday on 1/1/1922)
نتیجه : سه شنبه ۱۳۹۹/۰۵/۲۸
MM/DD/YYY
12/30/2093
SELECT DateDiff("d", #01/01/1922#, #12/30/2093#);=62821
--following is not applicable on 1922 and the past!!!
62821\365.25=171+1300=1471
62821-171×365.25=363.25~364
سال ۱۴۷۱ کبیسه نیست و ماه اسفند ۲۹ روزه می شود.
364+11-30-30-29=286
یک عدد به عدد سال اضافه می شود : 1472
286-6×31-3×30=10
1+3=4(1 sunday on 1/1/1922)
نتیجه : چهارشنبه ۱۴۷۲/۱۰۱۰
vbSunday | 1 | Sunday |
vbMonday | 2 | Monday |
vbTuesday | 3 | Tuesday |
vbWednesday | 4 | Wednesday |
vbThursday | 5 | Thursday |
vbFriday | 6 | Friday |
vbSaturday | 7 | Saturday |
MM/DD/YYYY
02/19/1956
SELECT DateDiff("d", #01/01/1922#, #2/19/1956#);=12467
12467\365.25=34
12467-34×365.25=48.5~49
49+11-30=30
29 Is True
نتیجه : یکشنبه ??? 1334/11/30
۰+۱=۱(۱ Sunday On 1922)
تاریخ بالا 1334/11/29 اعلام شده که می بایست بصورت یک شمارشگرعدد 12467 به تاریخ مبنا اضافه شود با در نظر گرفتن سال های کبیسه
MM/DD/YYYY
12/27/2119
SELECT DateDiff("d", #01/01/1922#, #12/27/2119#);=72313
72313\365.25=197+1300=1497
72313-197×365.25=360.72~361
سال ۱۴۹۷ کبیسه نیست.
361+11-30-30-29=283
یک عدد به عدد سال اضافه می شود : 1498
283-6×31-3×30=7????>>>>6 is True
برای تاریخ بالا مشخص شد عدد 365.25 یکروز اختلاف را نشان میدهد در نتیجه بهتر است :
-با عددی که در ابتدا بیان شد کار را با تاریخ های بیشتری مورد آزمون قرار دهید . یا حاصل تفریق سال در عدد مورد نظر و Diff را در کبیسه RoundUp کنید یا اینکه یک عدد به عدد صحیح حاصل تفریق اضافه نمائید با حذف اعشارالبته.
این مطلب جهت نشان دادن یکروز اختلاف که قبلا گفته شد ارائه گردید
در صورتیکه مطلب فوق کمکی به شما نُمود لطفا در نظرسنجی شرکت کرده و یا کامنت بگذارید.
باسپاس فراوان از خواندن این مطلب
تیر ۱۴۰۲ : ( خزعلی ) معاون رییس جمهور در امور زنان و خانواده همچنین در دیدار با مردم روستای گرَهوِن افزود: ۲۰۰ میلیون تومان وام و ۲۰۰ میلیون تومان کالابرگ تهیه جهیزیه و ۲۰۰ میلیون وام اشتغال بخشی از تسهیلاتی است که به دهه شصتیها ارائه میشود.
https://fa.m.wikipedia.org/wiki/گاهشماری_رسمی_ایران
از قائده ی خاصی پیروی نمیکند لیست زیر طبق جدول لینک بالا از سال ۴ تا سال ۱۴۷۳ می باشد ، بعد از هر عدد یک کبیسه ی پنج ساله است و بعد از آن تا شروع عدد بعدی هر چهار واحدیک کبیسه ی چهارساله است.
اعداد زیر طبق جدول گاه شماری_رسمی_ایران ( لینک بالا ) استخراج شده .
ARRAY(4,37,66,99,132,165,198,231,264,297,326,359,392,425,458
491,524,553,586,619,656,685,718,751,784,817,850,883,916,
949,978,1011,1044,1077,1110,1143,1176,1209,1238,1275,
,1308,1341,1370,1403,1436,1473,1502,1535,1568,1601
1634,1667,1696,1733
اعداد بالا را در تابع Array قرار میدهیم بدون دابل کوتیشن فرضا اگر بخواهیم کبیسه بودن سال ۱۳۸۰ را بسنجیم
۱-عددی در آرایه را که از عدد ۱۳۸۰ کوچکتر باشد را پیدا میکنیم که در اینجا ۱۳۷۰ را نمایش خواهد داد
۲-همانطور که گفته شد بعد از اعداد یاد شده عدد بعدی باضافه ی ۵ کبیسه ی ۵ ساله میشود و اعداد بعدی آن هر چهار واحد اضافه کبیسه ی چهار ساله میشود . پس بین عدد ۱۳۷۰ تا ۱۳۸۰ لوپ میزنیم یا در همان دو لوپ ایجاد شده در لوپ اول یک C بعنوان کانتر میزنیم و میگوئیم C=C+1
لوپ اول هم در آرایه یکی یکی اعداد را میگیرد و بازه ی لوپ دوم عدد آرایه در لوپ اول و عدد بعد از آن خواهد شد .
قسمتی ازکد بقیه توسط الگوریتم باید انجام شود :
DO
.
DO
DEBUG.PRINT J
IF J>A+5 THEN J=J+4 ELSE J=J+5
(LOOP UNTIL J>=ARR(I+1 ؟؟؟ >
X=J
I=I+1
(LOOP UNTIL I=Ubound(J
لوپ دوم می تواند تا زمانی ادامه یابد که سال داخل تابع کوچکتر مساوی عدد داخل آرایه باشد. ( فرضا میخواهید چک کنید چند سال کبیسه را تا قبل از سال ۱۳۷۰ پشت سر گذاشته اید : برای اختلاف تاریخ شمسی حتما باید تعداد کبیسه تا یکسال قبل محاسبه شود ولی برای توتال روزهای گذشته از سال کنونی خود سال باید مشخص شود که کبیسه هست یا خیر .... عددی در آرایه که کوچکتر از ۱۳۷۰ باشد را میگیریم و طبق آنچه گفته شد ۵ سال به عدد آرایه اضافه می کنیم که کبیسه ی ۵ ساله است و کبیسه های بعدی چهار تا چهارتا اضافه میشود)
برای لیست کردن سال های کبیسه طبق آرایه ی بالا اگر Ubound و Lbound جواب دهد میتوان سال های کبیسه را لیست کرد چه در اکسل چه در اکسس طوری عمل میشود که عدد اول را باضافه ی ۵ میکند و بقیه را بعلاوه ی چهار تا به عدد بعدی در آرایه برسد اگر عدد آخر با pointer ( یا عدد بعدی آرایه ) برابر نبود عددها را چاپ کند ، فرضا
4+5=9 و بعد چهار تا چهارتا جلو میرود ۹+۴ ، ۱۳+۴ ، ۱۷+۴ ، ۲۱+۴
۲۵+۴ ، ۲۹+۴ ، ۳۳ +۴ که ۳۷ میشود
بدست آوردن دقیق کبیسه برای کسانیکه میخواهند تقویم دقیقی داشته باشند یا محاسبه ی دقیق از سال یک تا ۱۵۰۰ پیروی از این سبک الزامیست وگرنه اختلاف یک یا دو روز حداکثر حتمی است.
مرجع: گاه شماری_رسمی_ایران
سالهای کبیسه رسمی یک قرن اخیر با توجه به دورهها:
(دورهٔ ۳۳ساله): ۱۲۸۰ - ۱۲۸۴ - ۱۲۸۸ - ۱۲۹۲ - ۱۲۹۶ - ۱۳۰۰ - ۱۳۰۴ - ۱۳۰۸
(دورهٔ ۳۳ساله): ۱۳۱۳ - ۱۳۱۷ - ۱۳۲۱ - ۱۳۲۵ - ۱۳۲۹ - ۱۳۳۳ - ۱۳۳۷ - ۱۳۴۱
(دورهٔ ۲۹ساله): ۱۳۴۶ - ۱۳۵۰ - ۱۳۵۴ - ۱۳۵۸ - ۱۳۶۲ - ۱۳۶۶ - ۱۳۷۰
(دورهٔ ۳۳ساله): ۱۳۷۵ - ۱۳۷۹ - ۱۳۸۳ - ۱۳۸۷ - ۱۳۹۱ - ۱۳۹۵ - ۱۳۹۹ - ۱۴۰۳.
جدول زیر از وب گرفته شده و باید طبق جدول داخل لینک طبق ردیف هاچک کنید .
روش :
1-جداکردن ماه ، روز و سال و ذخیره در Alias ها ی M,D,Y که برای تاریخ میلادی بسیار آسان است
(Y=Year(Dt
(M=Month(Dt
(D=Day(Dt
و اگر تاریخ ورودی اعتبار نداشته باشد فرضا ماهی که ۲۹ روزه است را سی روزه وارد کنید یا ماه را بیشتراز ۱۲ تایپ کنید یا فرمت اشتباه باشد خودش ارور را اعلام میکند احتمالا بعنوان Type Mismatch ... از توابع بالا برای ماه شمسی نمی توانید استفاده کنید چونکه روزهای ماه شمسی با میلادی فرق میکند.
۲-لوپ زدن از یک تا تعداد روزی که باید به تاریخ اضافه شود یعنی n منهای یک
۳-D=D+1
4-اگر D بزرگتر از تعداد روزهای میلادی شد D برابر یک خواهد شد ( (البته باید طبق سال کبیسه باشد ) و M=M+1
5-اگر Y بزرگتر از ۱۲ شد Y=Y+1 و M=1
البته این کانتراست و بسیاردقیق ، اگر فواصل تاریخی زیاد باشد این روش مناسب نیست چون حدود ۳ ثانیه طول میکشد تا جواب را برگرداند .
اضافه کردن 474003 روز به ۲۲ مارس ۶۲۲ که برابر روز جمعه اول فروردین سال یک است .
بدست آوردن شمسی : (البته با DateDiff میتوان اختلاف بین ۲۲ مارس ۶۲۲ تا ۳۱ دسامبر ۱۹۱۹ را بدست آورد که همین عدد است)
۱-تعداد روزهای سپری شده از اول ماه شمسی که اینجا یک فروردین سال یک است معادل ۲۲ مارس ۶۲۲ موردنظر که اینجا ۱ است
۲-تعداد کبیسه های میلادی که ۳۱۴ است
474,003−(1,298×365)−314+
1
در معادله ی بالا عدد منفی شده که با ۳۶۵ اگر جمع کنیم عدد ۲۸۵ حاصل میگردد که هدف ماست بعد از کم کردن تعداد ماه های شمسی از عدد تا زمانیکه منفی نشده روز بدست می آید که همان ۹ است و تعداد ماه های کم شده باضافه ی یک هم ماه مذبور
میشود یعنی ۱۰ ... پس تاریخ ۹ دیماه ۱۲۹۸ خواهد شد
: بدست آوردن میلادی
اگر عدد کوچکتر مساوی صفر شد با ۳۶۵ جمع میزنیم
474,003−(1,298×365)−314
+81+365=365
اضافه کردن ۴۳۰۸ روز به ۳/۲۱/۲۰۰۶ یا معادل شمسی ۸۵/۱/۱
تعداد کبیسه ی ۲۰۰۶ تا ۲۰۱۷ سه است و برای شمسی تعدا د روز را یک فروردین میگیریم در ۸۵/۱/۱
4,308−(11×365)−3+1=291
میلادی ۲۰۰۶
تعدادکبیسه ی ۲۰۰۶ تا ۲۰۱۷ سه است و روزهای سپری شده ی سال ۲۰۰۶ هم عدد ۸۰ است
4,308−(11×365)−3+80=370
که یکی به سال اضافه میشود و ماه یک میشود ، روز میلادی هم ۵ خواهدشد
این دست نویس ها بسیار ارزشمند است تعداد روزهای سپری شده از اول تا ۲۲ مارس ۶۲۲ عدد ۲۲۶۸۹۶ است
سال میلادی منهای یک + جمع روزهای ( ماه میلادی منهای یک ) + روز + تعداد کبیسه های سپری شده از سال یک تا سال میلادی منهای یک - ۲۲۶۸۹۶
مثال های زیر در ایجاد تقویم شمسی کمک خواهند کرد فقط با محاسبه ی روزهای سپری شده از جمعه ۱/۱/۱
از جمعه ۱/۱/۱ تا دوشنبه ۱۳۹۸/۲/۳۰ میشود ۵۱۰۳۰۳
510303 mod 7 = 3
اگر مانده ی تقسیم صفرشد یعنی جمعه هست ... ۳ یعنی دوشنبه
۱۳۷۸/۱۰/۱۱ : ۵۰۳۲۲۴
معادل شنبه یک ژانویه ی ۲۰۰۰
503224 mod 7 = 1
یک یعنی شنبه
۱۳۷۹/۱۰/۱۲ : ۵۰۳۵۹۰
معادل دوشنبه ۱ ژانویه ۲۰۰۱
۵۰۳۵۹۰ mod ۷ = ۳
۳ یعنی دوشنبه
۱۳۵۷/۶/۲۰ : ۴۹۵۴۴۲
معادل دوشنبه ۱۱ سپتامبر ۱۹۷۸
۴۹۵۴۴۲ mod ۷ = ۳
۳ یعنی دوشنبه
۱۲۹۸/۱۰/۱۰ : ۴۷۴۰۰۴
معادل پنج شنبه ۱ ژانویه ۱۹۲۰
۴۷۴۰۰۴ mod ۷ = ۶
۶ یعنی پنج شنبه
۱۳۹۸/۱/۱ : ۵۱۰۲۴۳
معادل پنج شنبه ۲۱ مارس ۲۰۱۹
۵۱۰۲۴۳ mod ۷ = ۶
۶ یعنی پنج شنبه
لینک محاسبه گر روز و اختلافhttps://www.bahesab.ir/time/age/
لینک مانده ی تقسیمhttps://www.omnicalculator.com/math/modulo