PDA

View Full Version : نحوه استفاده از توابع تاريخ شمسي



Profesorjd
پنج شنبه 21 شهریور 1387, 23:45 عصر
با سلام
1- بعد از جستجو فراوان توانستم 3 تابع تاريخ شمسي بيابم ولي در هيچكدام حتي با مثالهاي همراهشان نتوانستم راه استفاده كامل آنها را بيابم .
2- تابع آقاي آزادي تاريخهاي بيش از سال 1399 را نميتواند درست نمايش و محاسبه كند . بنظر دو تابع ديگر كه يكي با Mtos()‌ و ديگر با TarikhShamsi تعريف ميشوند كاملتر هستند ولي ..
3- استفاده از تاريخ ممكن است كوتاه يا بلند ، با روز هفته يا بدون آن است . خواهش بنده اين است كه اساتيد راهنمايي فرمايند . البته با مثال كه خيلي عالي است .
4- يادآوري ميكنم جستجو را انجام دادم و حتي سر از انجمنهاي ديگر (VB.net ، VB ، PHp , Sql ,ASP و ...) در آوردم ولي نتيجه اي حاصل نشد
5- درخواست بنده نحوه استفاده از توابع مذكور براي :
الف) 1387/06/21
ب) 87/6/21
ج) پنج شنبه 1387/06/21 يا پنج شنبه 87/6/21 و ..
د) پنج شنبه
ه) 21/شهريور/87 يا 21/شهريور/1387 يا پنج شنبه 21/شهريور/87 و ...
....
است

مهدی قربانی
جمعه 22 شهریور 1387, 01:34 صبح
سلام
توابع آقاي آزادي خواسته هاي شما رو برآورده ميكنه ، البته همونطور كه اشاره كرديد يكي از مشكلاتش محاسبه تاريخ تا 1399 هست .

نمونه مرتبط با بهره گيري از ماجول تاريخ شمسي جناب آقاي آزادي :

Profesorjd
جمعه 22 شهریور 1387, 23:27 عصر
باسلام و تشكر
1- همانگونه كه فرموديد تابع آقاي آزادي تا سال 1399 كار نميكند كه براي برنامه ام مشكل ايجاد ميكند .
2- منظورم بيان تابعي است كه بتوان آنگونه كه مثال زده‌ام به جواب برسيم . مثلاً تابع Dat() تاريخ روز به همراه روز هفته را ميآورد . تابع Shmasi() و تابع () Rooz() ,Mah , مشكل اينجاست كه چند جا خواسته‌ام استفاده كنم با مشكل مواجه شدم و وفقط تابع Dat‌ كار ميكرد .
3- چگونه اين توابع را استفاده كنم كه اولاً مشكلات فوق بوجود نيايد ؟ ثانياً با ايمپورت ماژول نقص پيدا نكند ؟ ثالثاً هر كدام را چگونه و كجا بكار ببرم ( البته از مثال ارسالي مشخص است ولي بنظرم آمد يك آموزش متني بهتر كاربرد داشته باشد البته مكمل آن مثال است )
4- دو توابع ديگر كه نميدانم كار چه كسي است كاملتر هستند اما توضيح مناسبي ندارند .
توضيح اينكه مشكل زماني پيش ميآمد كه ميخواستم با استفاده از اين توابع برنامه دعاي روز كه كار دوستان بوده و مبتني بر فايل DLL بود را بصورت بازو با اين توابع تنظيم كنم .

amirzazadeh
شنبه 23 شهریور 1387, 09:09 صبح
باسلام و تشكر
1- همانگونه كه فرموديد تابع آقاي آزادي تا سال 1399 كار نميكند كه براي برنامه ام مشكل ايجاد ميكند .
2- منظورم بيان تابعي است كه بتوان آنگونه كه مثال زده‌ام به جواب برسيم . مثلاً تابع Dat() تاريخ روز به همراه روز هفته را ميآورد . تابع Shmasi() و تابع () Rooz() ,Mah , مشكل اينجاست كه چند جا خواسته‌ام استفاده كنم با مشكل مواجه شدم و وفقط تابع Dat‌ كار ميكرد .
3- چگونه اين توابع را استفاده كنم كه اولاً مشكلات فوق بوجود نيايد ؟ ثانياً با ايمپورت ماژول نقص پيدا نكند ؟ ثالثاً هر كدام را چگونه و كجا بكار ببرم ( البته از مثال ارسالي مشخص است ولي بنظرم آمد يك آموزش متني بهتر كاربرد داشته باشد البته مكمل آن مثال است )
4- دو توابع ديگر كه نميدانم كار چه كسي است كاملتر هستند اما توضيح مناسبي ندارند .
توضيح اينكه مشكل زماني پيش ميآمد كه ميخواستم با استفاده از اين توابع برنامه دعاي روز كه كار دوستان بوده و مبتني بر فايل DLL بود را بصورت بازو با اين توابع تنظيم كنم .
دوست عزيز اگر صرفا از تاريخ شمسي استفاده ميكنين ممكنه اين تاپيك به دردتون بخوره.
http://barnamenevis.org/forum/showthread.php?t=87658&page=8
...................
موفق باشيد

Profesorjd
شنبه 23 شهریور 1387, 20:43 عصر
باسلام
خير دوست عزيز نميخواهم با استفاده از DLL از توابع تاريخ شمسي استفاده كنم .
توابع آقاي آزادي توابعي خوبي هستند اگر مشكل زمان استفاده نداشت .
دو توابع ديگر كه در همين سايت موجود است هم قابل استفاده هستند و هم مشكل زمان استفاده ندارند . منتهي طريق استفاده كامل آنان بصورتي كه سئوال شد و مدير محترم مثالش را آورده‌اند را ميخواهم بدانم .ضمناً غير از آقاي فلاح توابع DLL متعددي هستند مانند اكسين سافت ، سينا سافت ، فرساران و ...

مهدی قربانی
یک شنبه 24 شهریور 1387, 00:31 صبح
دو توابع ديگر كه در همين سايت موجود است هم قابل استفاده هستند و هم مشكل زمان استفاده ندارند . منتهي طريق استفاده كامل آنان بصورتي كه سئوال شد و مدير محترم مثالش را آورده‌اند را ميخواهم بدانم

سلام
لينك اين ماجولها رو بذاريد تا بررسي بشه .

Profesorjd
یک شنبه 24 شهریور 1387, 22:11 عصر
سلام . چون متأسفانه نتوانستم لينكش را بيابم كدش را آوردم . اين اوليش :


Function Shamsi(Optional date1 As String, Optional SmallDate1 As Boolean) As String '================================================= === Dim d, P, w, mon, mm, ym, u, v, rp, X, i, ys, ms, dm, p1, d1, ds, DateShamsi d = Array(20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21) P = Array(11, 12, 10, 12, 11, 11, 10, 10, 10, 9, 10, 10) w = Array("یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنج شنبه","جمعه","شنبه") If SmallDate1 = True Then mon = Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12") Else mon = Array("اسفند", "بهمن", "دی", "آذر", "آبان", "مهر", "شهریور", "مرداد", "تیر", "خرداد", "اردیبهشت", "فروردین") End If If date1 = "" Then date1 = DateAdd("d", 1, Date) dm = Day(date1) mm = Month(date1) ym = Year(date1) u = 0 rp = 0 If (ym Mod 4) = 0 Then u = 1 If ((ym Mod 100) = 0 And (ym Mod 400) <> 0) Then u = 0 ys = ym - 622 X = ys - 22 X = X Mod 33 If ((X Mod 4) = 0 And X <> 32) Then rp = 1 i = Not (rp - 2) + Not (u - 2) * 2 X = 0 If (i = 0 And mm = 3) Then X = 1 If i = 0 Then i = 3 ms = (9 + mm) Mod 13 If ms < 10 Then ms = ms + 1 d1 = d(mm - 1) If (i = 1 And mm > 2) Then d1 = d1 - 1 If (i = 2 And mm < 3) Then d1 = d1 - 1 p1 = P(mm - 1) If (i = 1 And mm > 2) Then p1 = p1 + 1 If (i = 2 And mm < 4) Then p1 = p1 + 1 If (dm > 0 And dm <= d1) Then ds = p1 + dm + X - 1 X = 1 Else ds = dm - d1 ms = ms + 1 If ms = 13 Then ms = 1 X = 2 End If If ((mm = 3 And X = 2) Or mm > 3) Then ys = ys + 1 ds = Str(ds) If Len(Trim(ds)) = 1 Then ds = "0" + Trim(ds) If SmallDate1 = True Then' اگر سال به صورت دو کارکتری میخواهید خط زیر را از حالت کامنت در آورید' Shamsi = Mid(Trim(Str(Ys)), 3, 2) + "/" + Trim(mon(Ms - 1)) + "/" + Trim(Ds)' اگر سال به صورت چهار کارکتری میخواهید خط زیر را از حالت کامنت در آورید Shamsi = Trim(Str(ys)) + "/" + Trim(mon(ms - 1)) + "/" + Trim(ds) Else Shamsi = w(Weekday(Date) - 1) + " " + Str(ds) + " " + mon(ms - 1) + " " + Str(ys) End IfEnd Function

البته اين توابع و توابع دومي در تاپيك مشكلات فارسي و سورسهاي مربوطه موجود هستند .

Profesorjd
سه شنبه 26 شهریور 1387, 21:50 عصر
با سلام
اساتيد گرامي ! كاربرد اين توابع را نيافته‌اند . البته بنده هنوز منتظر هستم

مهدی قربانی
سه شنبه 26 شهریور 1387, 22:13 عصر
سلام
در حال بررسي هستم .

mehdi_moghimi
شنبه 30 شهریور 1387, 20:10 عصر
دوست عزيز ميتوانيد از توابع زير استفاده كنيد. فقط بعد از وارد شدن به اكسس به محيط كد نويسي رفته و فايلهاي ضميمه را Import كنيد. اين توابع بسيار جالب و داراي فايل راهنما ميباشد.

Profesorjd
شنبه 30 شهریور 1387, 22:34 عصر
با سلام .
1- تشكر از جناب قرباني بابت قراردادن اين تاپيك در اعلان .
2- در استفاده از توابع فوق با مشكل مواجه شدم . بطور معمولي تاريخ روز را حساب ميكنند حتي بعد از سال 1399 ولي براي استفاده از تاريخ با روز هفته يا ماه فارسي ( شهريور) با مشكل مواجه شدم .
3- براي توضيح اينكه در اين توابع براي استفاده از تاريخ فارسي از تابع TBH‌ استفاده شد كه مشكل ايجاد كرد . ضمناً تبديل عدد به حروف هم در اعشار و هم در اعداد بالا مشكل دارد .
4- اگر به اولين تاپيك دقت فرماييد توابع فارسي اعداد و تاريخ شمسي بسيار ديده‌ام ولي راهنما براي نحوه استفاده از آن بطور نمونه مثالهاي زده شده نيافتم . اگرچه راهنمايي توابع آقاي ميداني مناسب است ولي بازهم كامل نيست .

mohsenna30ri
یک شنبه 07 مهر 1387, 11:54 صبح
بهترين و راحت ترين راه حل:

اگر از ويندوز ايکس پي و آفيس 2003 استفاده مي کنيد راحت ترين راه حل فکر کنم اين تاپيک باشه:

http://barnamenevis.org/forum/showthread.php?t=85747

با استفاده از اين فايل dll شما تاريخ هجري شمسي را در اکسس خواهيد داشت و احتياجي به تبديل تاريخ به هجري شمسي نخواهد بود
البته حواستان باشد که در قسمت option تاريخ آنرا روي هجري تنظيم نمائيد.

Profesorjd
یک شنبه 07 مهر 1387, 21:45 عصر
با سلام و تشكر
1- اين Dll مناسب است ولي براي ارسال برنامه براي ديگران بايد راه استفاده از آن را هم فرستاد ! . ضمناً جالب نيست كه براي برنامه‌هايي كه نوشته ميشود و براي ديگران كاربرد مي‌يابد از اين روش استفاده كرد .
2- دوستان ! توابع تاريخ شمسي يا ماژولهايي براي ايجاد تاريخ شمسي براي خودم ( تك كاربر رايانه ) نميخواهم . راه استفاده با توجه به تاپيك اول نياز است .

Ali_Fallah
سه شنبه 09 مهر 1387, 19:56 عصر
چند روزي صبر کن ...
موفق باشيد

Ali_Fallah
پنج شنبه 11 مهر 1387, 15:57 عصر
کدهاي آقاي ازادي را (با اجازه) کمي دستکاري و تعديل کرده و کدهاي ديگري که مربوط به VB ‌ميشد به اين برنامه (کدها) اضافه کردم تقريباً جواب ميده
البته به مقدار مشکل بازم هست
با اون کار کنيد متوجه ميشويد...

atehran2002
سه شنبه 23 مهر 1387, 08:06 صبح
با سلام
از left می توانی استفاده کنی.مثلا در یک ستون بگویی از left 4 تا را بیار .

Profesorjd
سه شنبه 23 مهر 1387, 20:56 عصر
با سلام و تشكر
1- توابع شمسي تاريخ ميلادي را به شمسي تبديل ميكنند . اما هميشه براي استفاده از آن يك حالت نياز نيست .
2- گاهي تاريخ بصورت روز/ماه/سال ( 23/7/87) نياز است گاهي كامل 23/07/1387 . گاهي 23/مهر/87 و 1387
گاهي 23 مهر . گاهي هم بصورت سه شنبه 23/مهر/ 1387 .
3- left يا Right‌ يا .. نيازي نيست . مشكل اين است كه توابع تاريخ شمسي توضيحي براي استفاده از آنان براي استفاده از صور مختلف نمايش تاريخ ندارند .
4- در همين سايت 3 توابع تاريخ شمسي وجود دارد ( در تاپيك نمونه برنامه هاي فارسي ) . اما اكثراً يا توضيح كامل ندارند يا براي استفاده از صور مختلف تاريخ ميبايد يا از روش جناب قرباني استفاده كرد كه با توجه به مشكلات تاريخ بعد از 1399 توابع جناب آزادي مشكل وجود دارد ( خودشان كه پيدا نميكنيم )
5- توابعي كه جناب فلاح درست كرده اند بعد از 1399 يك روز اختلاف دارند ( دو روشي كه نوشته اند ) و ايضا اشتباه ميشوند .
با توجه به موارد مزبور و وجود اين 3 توابع در سايت روش استفاده از آنان براي استفاده صور مختلف نمايش تاريخ نياز ميباشد .

Profesorjd
چهارشنبه 01 آبان 1387, 20:06 عصر
با سلام
1- مثل اينكه آموزشي براي نحوه استفاده از توابع تاريخ شمسي آماده نشد !
2- تابع TarikhShamsi تاريخ را اشتباه محاسبه ميكند . مثلاً امروز را چهارشنبه 30/7/87 نشان ميدهد !
3- مجموع توابع فارسي ( J_Date ) شامل ماژولهايي است كه بعضاً نيازي به آنها نيست ( مثل تبديل عدد به حروف ) البته تاكنون عملكرد خوبي داشته است . اساتيد راهي براي تفكيك اين توابع از هم كه به تنهايي قابل استفاده باشند نميابند ؟

Profesorjd
جمعه 03 آبان 1387, 09:59 صبح
با سلام
1- فايل پيوست با استفاده از تابعي نوشته شده كه در همين سايت موجود است . روز هفته و نام ماه در آن استفاده شده است اما روز هفته را با استفاده از تابع خود اكسس نوشتم .
2- انواع استفاده از تاريخ فارسي در آن چگونه نوشته ميشود ؟
3- آنچه كه نوشته‌ام بصورت : امروز : جمعه 1387/08/03 آبان ، است ولي مد نظر بنده 03/آبان/1387 است كه نتوانستم راهي براي آن بيابم .
4- چگونه از تابع HowDay‌ استفاده كنم كه برگردان نام روز هفته فارسي است كه اگر برنامه در ويندوزي استفاده شد كه فارسي آن نصب نبود بجاي "جمعه" Friday ننويسد ؟

مهدی قربانی
شنبه 04 آبان 1387, 17:48 عصر
سلام
پاسخ رديف 3 ، در Text3 موجود روي فرم مورد نظر فرمول رو به اين ترتيب بنويسيد :

="امروز : " & WeekdayName(Weekday(Now())) & " " & Mid(shamsi(Now());9;2) & "/" & HowMonth(Right(shamsi(Now());5)) & "/" & Mid(shamsi(Now());1;4)
در مورد سئوال رديف 4 خوب در صورتي كه روي ويندوز فارسي ساز نصب نشده باشه كه فونتها مشكل پيدا مي كنه و درست نمايش داده نمي شه ! ؟

Profesorjd
شنبه 04 آبان 1387, 18:33 عصر
با سلام و تشكر
1- تشكر از پاسخ به سئوال دوم !
2- در مورد سئوال اول كه (اصل تاپيك براي آن است) راهي پيدا نشده است ؟
3- سئوال سوم بصورت پيش‌فرض بيان شد !! بصورت طبيعي تابع WeekDay و ايضاً WeekDayName نام روز هفته را براساس تنظيمات سيستم انجام ميدهد . اگر فرض انگليسي باشد ( به فرض ) ضرورتاً تابع HowDay كاربرد خواهد داشت . بنده هم مد نظرم نحوه استفاده از اين تابع بود .
4- آيا با وجود اين توابع ، ضروت دارد با ترفند و كدنويسي ( غير از هيجانش ) نام روز هفته يا ماه را بدست آورد ؟ نميشود مانند توابع آقاي آزادي با ذكر ()Dat مشكل را حل كرد ( اگر چه در خط توابعش قابل تغيير است ) ؟
5- و آيا كسي از آقاي آزادي خبري دارد تا ضمن رعايت كپي رايت مشكل توابعش را رفع نمايد ؟