PDA

View Full Version : درخواست تابع



محمد رضا بهبودی
چهارشنبه 28 اردیبهشت 1401, 08:53 صبح
با سلام و احترام
خدمت دوستان و اساتید محترم
می خواستم بدونم تابعی وجود دارد که یک عدد را به مقدار ماه یک تاریخ شمسی اضافه کند ؟ به طور مثال اگر عدد 2 را به تاریخ 1401/02/01 اضافه کنیم نتیجه آن 1401/04/01 شود و یا اگر عدد 3 را به تاریخ 1400/12/01 اضافه کنیم نتیجه آن 1401/03/01 شود .

ممنون

mazoolagh
چهارشنبه 28 اردیبهشت 1401, 12:52 عصر
سلام و روز خوش
این دست توابع رو باید در همون ماژولی که برای تاریخ خورشیدی استفاده کردین پیدا کنین،
ولی چون سال های کبیسه تاثیری در این محاسبه نداره و الگوریتم ساده ای هم داره، خودتون هم میتونین جداگانه بنویسین.

با فرض منطقی که تاریخ از نوع LONG و به فرمت YYYYMMDD باشه، تابع شما چیزی شبیه کد زیر میشه:

FUNCTION PDate_AddMonth(PDate AS LONG , Months AS LONG) AS LONG
DIM YYYY , MM , DD AS LONG
DD= PDate MOD 100
YYYY= PDate\10000
MM= (PDate\100) MOD 100
YYYY= YYYY + Months\12
MM= MM + Months MOD 12
IF MM > 12 THEN
MM= MM MOD 12
YYYY= YYYY + 1
ELSEIF MM < 1 THEN
MM= 12 + MM
YYYY= YYYY - 1
END IF
PDate_AddMonth= YYYY*10000 + MM*100 + DD
END FUNCTION

این تابع باید بازای مقادیر منفی Months هم کار کنه، در هر صورت اول اون رو بازای همه حالتها چک کنین چون خودم تست نکردم!

محمد رضا بهبودی
شنبه 31 اردیبهشت 1401, 06:51 صبح
با سلام و احترام خدمت استاد گرانقدر جناب مازولق
ممنون از راهنمائی جنابعالی
خودم هم یک تابع در اکسس پیدا کردم که اتفاقا با تاریخ هجری شمسی هم کار می کند به نام dateadd
با استفاده از این تابع می توان یک مقدار ثابت را به سال یا ماه یا روز یا ساعت یا دقیقه و یا ثانیه یک تاریخ اضافه نمود

محمد رضا بهبودی
شنبه 31 اردیبهشت 1401, 07:02 صبح
تابع DateAdd فاصله زمانی مشخص را به تاریخ اضافه می کند و یک Variant (Date) را برمی گرداند.

قالب: DateAdd (فاصله ، شماره ، تاریخ)

استدلال:
فاصله
اجباری
نوع: عبارت رشته
بازه زمانی که می خواهید اضافه کنید

Setting
Description


Yyyy
Year


Q
Quarter


M
Month


Y
Day of year


D
Day


W
Weekday


Ww
Week


H
Hour


N
Minute


S
Second



عدد
اجباری
نوع: عددی
تعداد فواصل زمانی که می خواهید اضافه کنید

تاریخ
اجباری
نوع: تاریخ
تاریخی که در آن فاصله اضافه می شود

محمد رضا بهبودی
شنبه 31 اردیبهشت 1401, 07:03 صبح
Function FnDateAdd()
Dim strDate
strDate = CDate("June 24, 2013")
strNewDate = DateAdd("m", 2, strDate)
MsgBox strNewDate
strNewDate2 = DateAdd("yyyy", -3, strDate)
MsgBox strNewDate2
strDate2 = CDate("June 24, 2013 12:00:00 PM")
MsgBox DateAdd("h", 2, DateAdd("n", 23, strDate2))
End Function https://www.webinux.ir/assets/images/_doc/31405.jpg

mazoolagh
شنبه 31 اردیبهشت 1401, 11:09 صبح
جناب بهبودی!
این که دیگه پرسش خودتون هست و نمیشه گفت دقت نکردین (مگر این که پرسش کس دیگه ای باشه که شما اینجا کپی کرده باشین)

شما مشخصا نوشتین "تاریخ شمسی" ،
این تابع dateadd رو هم که آوردین هر مبتدی میدونه برای تاریخ میلادی هست و نه شمسی، احتمالا شما تازه با این آشنا شدین.
ارتباطش به پرسش اولیه چی هست لابد خودتون میدونین.

محمد رضا بهبودی
یک شنبه 01 خرداد 1401, 06:47 صبح
با سلام و احترام
ممنون از راهنمائی استاد گرامی جناب مازولق
جهت استحضار تابع dateadd با تاریخ های هجری شمسی نیز کار می کند و من در حال استفاده از آن می باشم

mazoolagh
سه شنبه 03 خرداد 1401, 12:20 عصر
سلام دوباره

این تابع فقط برای تاریخ میلادی هست و نه خورشیدی - اگر اینجور بود شاید اصلا نیاز به ساخت 99% تاپیکهای مربوط به تاریخ خورشیدی در این انجمن نبود.
شما فقط از حالتهای خاصی استفاده کردین که در اونها روش محاسبه عملیات تاریخ خورشیدی و میلادی یکی بوده،
که همین اضافه کردن ماه یا سال هست و حتی برای همین حالت خاص هم مجبورین اول تاریخ خودتون رو تغییر شکل بدین.

برای اینکه کاملا متوجه بشین:
با استفاده از همین تابع یک روز به 29 اردیبهشت 1401 اضافه کنین!
یا 24 ساعت به 31 تیر هر سالی!

محمد رضا بهبودی
سه شنبه 03 خرداد 1401, 13:07 عصر
با سلام و احترام
جناب استاد مازولق
کاملا حق با جنابعالی می باشد و من ممنون از راهنمائی شما هستم
ولی درخصوص موضوعی که من مطرح کردم ، تابع dateadd مشکل من را حل کرد چون من فقط می خواستم مقدار معینی را به میزان ماه هر تاریخ اضافه کنم .