کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

فرآیند ایجاد تقویم شمسی در اکسس



۱-فرمی را ایجاد می کنید شامل ۷ باتن در بالا یا بغل با نام گذاری در ویژگی کپشن آنها البته از سمت راست به چپ شامل : شنبه ، یکشنبه ، ... و جمعه 


۲-اگر روزیکم ماهی از یکسالی جمعه باشد در نتیجه باید طبق تصویر زیر ۵ ردیف ۷ تایی باتن یا لیبل داشته باشید



۳-کنترل کمبو باکس یا لیست باکسی ایجاد کنید که سال ها و نام ماه ها در آن فهرست شوند چرا که باتوجه به سال و ماه انتخابی کنترل ها یا لیبل های ایجاد شده در مرحله ۲  پر خواهندشد.

-نحوه پرشدن یا Filling : باید مشخص کنید ، اولِ هرماه چه روزی در هفته است >> شنبه ، یکشنبه و یا جمعه ، سپس در اولین ردیف در ستون شنبه تا جمعه نسبت به قرار دادن اعداد یک تا ۳۰ یا ۳۱ با توجه به ماه انتخابی اقدام کنید.


در تصویر اول فروردین ۷۱ روز شنبه است و چون فروردین ۳۱ روزه است از لیبل ۱ تا ۳۵ اعداد یک تا سی و یک در کپشن کنترل ها قرار گرفته خواهندشد.

bahesabtimeconversion

اختلاف روزهای بین دو تاریخ ۱/۱/۱ (جمعه) تا ۱۳۷۱/۱/۱ (شنبه) عدد ۵۰۰۳۸۳ روز است می توانید در آدرس اینترنتی >>باحساب<< این مقدار را بدست آورید.


اگر فرض شود که یکم جمعه باشدو ماه ۳۱ روزه ، باید از باکس  یا لیبل ۷ شروع به پر کردن  اعداد ۱ تا ۳۱ کنیم :




















این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) می‌باشد.





















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



In Memory Of


<<فقط جهت مطالعه>>


برای صِحَّت و سُقم فرمول اعمال شده  در مطالب زیرین لازم است با موارد خیلی بیشتری مورد آزمون قرار گیرد در نتیجه فقط جهت مطالعه قرار داده شده !!! .  اعمال آن در برنامه ها به اختیار مجری است ولی توصیه به  استفاده نمی شود.برای درآورن اختلاف دو تاریخ یا اضافه کردن تعداد روزهایی به تاریخ مد نظر می بایست سال های کبیسه از تاریخ مبنا تا تاریخ درخواستی اعمال گردد تا تاریخ دقیقی بدست آید.


در ابتدا و پایان محاسبات در متن به اختلاف یک تا چند روز در سال های بزرگتر و فاصله دار طبق این روش پی خواهید برد.پس باماباشید



برای سال‌های ۱۲۴۴ تا ۱۳۴۲ چنانچه باقی‌ماندهٔ حاصل تقسیم سال مورد نظر بر عدد ۳۳، یکی از اعداد (۱، ۵، ۹، ۱۳، ۱۷، ۲۱، ۲۶ و ۳۰) باشد آن سال کبیسه خواهد بود. و برای سال‌های اخیر (سال‌های ۱۳۴۳ تا ۱۴۷۲)، به‌جای ۲۱، باقی‌ماندهٔ ۲۲ ملاک خواهد بود.


گاه‌شماری جلالی با حفظ سرآغاز و طول سال با تغییر مبدأ، اسامی و طول ماه‌ها در قالب گاه‌شماری هجری شمسی برجی درآمده و باز با تغییراتی در طول ماه‌ها ضمن تنوع اسامی آنها، عنوان تقویم هجری شمسی پیدا کرد.

این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) می‌باشد.



بر اساس محاسبات مرکز تقویم مؤسسهٔ ژئوفیزیک دانشگاه تهران که مرجع رسمی تقویم ایران است، از سال ۱۲۰۶ تا ۱۴۹۸ هجری شمسی این سالها کبیسه بوده‌اند یا خواهند بود:[۱۵]

۱۲۱۰، ۱۲۱۴، ۱۲۱۸، ۱۲۲۲، ۱۲۲۶، ۱۲۳۰، ۱۲۳۴، ۱۲۳۸، ۱۲۴۳

(۳۳ساله)، ۱۲۴۷، ۱۲۵۱، ۱۲۵۵، ۱۲۵۹، ۱۲۶۳، ۱۲۶۷، ۱۲۷۱، ۱۲۷۶

(۳۳ساله)، ۱۲۸۰، ۱۲۸۴، ۱۲۸۸، ۱۲۹۲، ۱۲۹۶، ۱۳۰۰، ۱۳۰۴، ۱۳۰۹

 (۳۳ساله)، ۱۳۱۳، ۱۳۱۷، ۱۳۲۱، ۱۳۲۵، ۱۳۲۹، ۱۳۳۳، ۱۳۳۷، ۱۳۴۲

(۳۳ساله)، ۱۳۴۶، ۱۳۵۰، ۱۳۵۴، ۱۳۵۸، ۱۳۶۲، ۱۳۶۶، ۱۳۷۰، ۱۳۷۵

(۳۳ساله)، ۱۳۷۹، ۱۳۸۳، ۱۳۸۷، ۱۳۹۱، ۱۳۹۵، ۱۳۹۹، ۱۴۰۳، ۱۴۰۸

(۳۳ساله)، ۱۴۱۲، ۱۴۱۶، ۱۴۲۰، ۱۴۲۴، ۱۴۲۸، ۱۴۳۲، ۱۴۳۶، ۱۴۴۱

 (۳۳ساله)، ۱۴۴۵، ۱۴۴۹، ۱۴۵۳، ۱۴۵۷، ۱۴۶۱، ۱۴۶۵، ۱۴۶۹، ۱۴۷۴

(۳۳ساله)، ۱۴۷۸، ۱۴۸۲، ۱۴۸۶، ۱۴۹۰، ۱۴۹۴، و ۱۴۹۸.


جدول اعداد تعیین‌کننده کبیسه «تقویم حسابی بهروز-بیرشک» تا سال ۳۲۹۳ هجری خورشیدی حسابی

۰ – ۴ – ۸ – ۱۲ – ۱۶ – ۲۰ – ۲۴ (۲۵) – ۲۹ – ۳۳ – ۳۷ – ۴۱ – ۴۵ – ۴۹ – ۵۳ – ۵۷ (۵۸) – ۶۲ – ۶۶ – ۷۰ – ۷۴ – ۷۸ – ۸۲ – ۸۶ – ۹۰ (۹۱) – ۹۵ – ۹۹ – ۱۰۳ – ۱۰۷ – ۱۱۱ – ۱۱۵ – ۱۱۹ (۱۲۰) – ۱۲۴

طبق جدول عددی فوق اگر در باقیمانده تقسیم سال حسابی موردنظر بر عدد ۱۲۸ (میان‌دوره متوالی) یکی از اعداد جدول فوق باقی مانده باشند آن سال کبیسه خواهد بود. با این تفاوت که برای سال‌های ۱ تا ۴۷۳ هجری خورشیدی حسابی اعداد اصلاح شده داخل (دوکمان) که یک شماره بیشتر نسبت به عدد همجوار آن است به‌جای آن به عنوان باقی مانده ملاک خواهد بود (بعلت شکاف بین دو دوره بزرگ).


سرآغاز گاه‌شماری

سرآغاز گاه‌شماری هجری خورشیدی روز جمعه «۱ فروردین سال ۱ هجری خورشیدی» (۲۹ شعبان ۱ سال پیش از هجرت) برابر با ۱۹ مارس ۶۲۲ میلادی قدیم (ژولینی) و ۲۲ مارس ۶۲۲ میلادی جدید (گرگوری) است.[۳] البته روز اول سال یک هجری خورشیدی (از ۱ فروردین تا ۲۴ شهریور) ۵ ماه و ۲۴ روز پیش از هجرت محمد (کمتر از یک سال) است.





کبیسه میلادی نو (گریگوری)

در تقویم میلادی نو سال‌هایی که بر ۴ بخش‌پذیر باشند (باقی‌ماندهٔ تقسیم آن سال بر ۴ برابر ۰ باشد) کبیسه هستند با این استثنا که از میان سال‌هایی که بر ۱۰۰ بخش‌پذیرند (سال‌های انتهای سده)، تنها آنهایی که بر ۴۰۰ نیز بخش‌پذیرند کبیسه هستند.




Leap year List from 1600 to 2100

YearYearYearYearYear
16001696179618961996
16041704180419042000
16081708180819082004
16121712181219122008
16161716181619162012
16201720182019202016
16241724182419242020
16281728182819282024
16321732183219322028
16361736183619362032
16401740184019402036
16441744184419442040
16481748184819482044
16521752185219522048
16561756185619562052
16601760186019602056
16641764186419642060
16681768186819682064
16721772187219722068
16761776187619762072
16801780188019802076
16841784188419842080
16881788188819882084
16921792189219922088
----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 باشد ولی روز را ۸ بدست آوردیم !!! اختلافی در حدود ۴ روز 

پس متوجه شدید که عدد ۳۶۵.۲۵ که در یکسری سایت ها بیان شده قابل اطمینان نمی باشد.

bahesab



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

bahesab

۶+۱=۷(۱ 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

bahesab



-فرض کنید تاریخ 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

bahesab

۱+۱=۲


-فرض کنید ، تاریخ 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


91×365.25234×313×3011+3=33015.9593

۳+۱=۴(۱ 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

نتیجه : یکشنبه ۱۳۸۳/۰۷/۱۲

bahesab

۰+۱=۱(۱ 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

bahesab

۰+۱=۱(۱ sunday on 1922)





-فرض کنید تاریخ ، 2017/03/21 باشد :



 نتیجه : سه شنبه 1396/01/01


msaccess_datediff

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

bahesab

۲+۱=۳(۱ sunday on 1922)



msaccess_datediff

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

bahesab



msaccess_datediff

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)

bahesab







-فرض کنید تاریخ ، 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)




ms_datediff

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

bahesab

۵+۱=۶(۱ Sunday On 1922)




ms_datediff

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

bahesab

۰+۱(۱ Sunday On 1922)


ms_datediff

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

bahesab

۶+۱(۱ Sunday On 1922)



ms_datediff

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

bahesab


۳+۱=۴(۱ Sunday On 1922)



برگردان شمسی به میلادی ( طبق تاریخ شمسی مبنا )  ... نیازمند آزمون و خطاست با چک کردن موارد بیشتر

1,4021,300=102

102×365.25+30+1111=37285.5

ms_dateadd

SELECT DateAdd("d",37285, #01/01/1922#);=1/31/2024 







MM/DD/YYYY

01/01/1964

ms_datediff

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

bahesab

ms_dateadd

۳+۱=۴(۱ Sunday On 1922)




MM/DD/YYYY

03/20/1964

ms_datediff

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

bahesab

ms_dateadd

۵+۱=۶(۱ Sunday On 1922)




ms_datediff

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

bahesab

ms_dateadd

۱+۱=۲(۱ Sunday On 1922)





ms_datediff

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

bahesab

ms_dateadd




MM/DD/YYYY

11/5/1996

ms_datediff

-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)

نتیجه : سه شنبه ۱۳۷۵/۰۸/۱۵

bahesab






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

ms_datediff

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

bahesab

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!!!

-171×365.25+31+28+31+30+31+30+31+31+30+31+30+301=62820.75~62821

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