PDA

View Full Version : کم کردن 2 تاریخ شمسی از یکدیگر



tc1000
شنبه 02 تیر 1386, 18:53 عصر
دو تا رشته دارم که شکل زیر هستند
20/12/1386 و 1/2/1386
میخوام این دوتا رو از هم کم کنم و تعداد روز بین این دو رو به دست بیارم.
با دات نت این کار راحته شون کلاسی برای تبدیل به تاریخ شمسی رو داره
ولی اینجا باید چکار کرد.
با تشکر

shamsoft
یک شنبه 03 تیر 1386, 06:24 صبح
بهترین کار اینه که تاریخ رو به تعداد روز تبدیل کنی
یعنی مثلا سال رو در 365 ضرب کنی. بعد ماه رو در 30 (که البته این جوری نباید ماه رو ضرب کنی. یعنی ماه های 1 تا 6 رو در 31 ضرب کنه و 7 تا 12 رو در 30 که کار سختی هم نیست. اگه سال کبیسه هم خواستی حساب کنی که دیگه میل خودته و کار سختی هم نیست :چشمک: ) روز هم که دیگه خودش روزه و با مقدارهای قبلی جمع می کنی. بعد جواب ها رو از هم کم کن تا تعداد روز بدست بیاد :لبخندساده:

CodeMasterX
یک شنبه 03 تیر 1386, 07:52 صبح
از تابع داخلی DateDiff استفاده کن، یا از کنترل Payam.Calendar.Library که توی همین بخش آقای پیام مرادی آپ کردن.

noorsoft
یک شنبه 03 تیر 1386, 07:59 صبح
باید ابتدا فاصله روزها را بدست بیاری و بعد فاصله ماهها را حساب کنی و ضرب در تعداد روزهای ماه کنی و بعد فاصله سالها را حساب کنی و ضربدر روزهای سال کنی
جمع این اعداد نشان دهنده فاصله دو تاریخ هستند

tc1000
یک شنبه 03 تیر 1386, 10:01 صبح
دوست عزیز این چیزی که شما گفتید درست. پس سال گبیسه چی میشه و یک چیز دیگه که با این روش شما کار نمیکنه اینه که:
مثلا این 2 تا تاریخ رو با این روشی که گفتی کم کن.
تاریخ اول : 1/12/1386 تا 1/2/1387
میبینی که گیر میکنه.

noorsoft
یک شنبه 03 تیر 1386, 16:18 عصر
تاریخهایی که شما مثال زده ایند که مشکل نیست شما در برنامه باید چند شرط اضافه کنید و این آنکه اگر عدد روز یا ماه تاریخ مبدا بزرگتر از تاریخ مقصد بود فاصله آن را تا اولین ماه یا اولین روز بعد حساب کند
اگه واقعا این برنامه را لازم داری تا برات بنویسم

shamsoft
یک شنبه 03 تیر 1386, 19:05 عصر
از تابع داخلی DateDiff استفاده کن
مگه اختلاف تاریخ شمسی هم حساب می کنه؟ فکر نکنم که این جوری بشه ها :متفکر:

واسه سال کبیسه باید ببینی چه سالی سال کبیسه بوده بعد دیگه هر 4 سال یک بار سال کبیسه رخ میده یعنی تو اون سال باید 1 روز به تعداد روزهای کل اضافه کنی.
اختلاف روزهای تاریخ کار سختی نیست. همه چیزش معلومه دیگه می تونی کدش رو بنویسی :چشمک:

Reza_sh_42
یک شنبه 03 تیر 1386, 22:43 عصر
سلام
من یه برنامه دارم که می تونه تقریبا همه مشکلات تاریخ شمسی رو حل کنه امیدوارم به دردتون بخوره

emadct
دوشنبه 04 تیر 1386, 10:15 صبح
دوست عزیز در کم کردن دو تاریخ شمسی چند مشکل داری:

1- حساب کردن روزها کار ساده ای نیست. به جز بحث کبیسه در تاریخ شمسی هر سی سال یکبار یک روز کبیسه جابجا میشه. اشتباهی که همه میکنن اینه که میگن هر چهار سال یک کبیسس. یعنی Year % 4.

ولی رابطه سالهای کبیسه هجری به صورت زیر
function leap_persian(year)
{
return ((((((year - ((year > 0) ? 474 : 473)) % 2820) + 474)
+ 38) * 682) % 2816) < 682;
}

برای کم کردن 2 تاریخ شمسی، شما باید هر دو اونها رو به
Julian تبدیل کنی.

Julian در اصل یک عدد که نمایشگر تعداد روزهای سپری شده از
EPOCH سال 1700.

بعد از تبدیل هر دو تاریخ به Julian باید عدد محاسبه شده رو به
تاریخ شمسی تبدیل کنی. که مثلا میشه 2 سالو و 3 ماه و 20 روز

تمامی این توابع در سایتی به نام Taghvim.org قرار داره. البته
باید صفحه رو Save کنی و از Script هاش که به زبان
JS یا همون C استفاده کنی.

برای تبدیلشون به VB مشکلی نداری چون همهچیز ریاضی!

موفق باشی
EmadCT

tc1000
دوشنبه 04 تیر 1386, 12:15 عصر
یک کد دارید که این کا رو کنه؟

mdt414
شنبه 25 شهریور 1391, 11:02 صبح
بهترین روش استفاده از کلاس Persian Culture و استفاده از System.Globalization هست.
برای استفاده از این روش ابتدا فایل PersianCulture رو که براتون ضمیمه کردم توی پروژه تون اضافه کنید و یک فایل Global.asax هم به پروژه تون اضافه کنید و کد زیر رو توی قسمت Application_BeginRequest بنویسید:


var persianCulture = new PersianCulture();
persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;




بعد با استفاده از کد زیر می تونید اختلاف تاریخ رو محاسبه کنید:



DateTime dt1=DateTime.Parse("1390/01/01");
DateTime dt2=DateTime.Parse("1391/06/15");
DateTime dt3=dt2-dt1;

m.4.r.m
شنبه 25 شهریور 1391, 12:39 عصر
خیلی راحت این ocx رو دانلود کن اینم دستورش :

Private Sub Form_Load()
Dim DY%
DY% = Shamsi1.sh_DateDiff(shDay, "1388/01/01", "1389/01/01")
MsgBox DY%
End Sub

abidana
شنبه 25 شهریور 1391, 16:46 عصر
یه راه ساده اینکه به سا عت محاصبه کنی یعنی سال و ماه و روز رابه ساعت حسابکنی کم کنی به هر چی خواستی تبدیل کنی
فقط باید به ماه دقت کنی که چند روز