Fa بدست اوردن اختلاف روزهای بین دو تاریخ

mmb4us

Member
دوستان سلام. امیدوارم که حال همتون خوب باشه
:)
دوستان بازم یه سوال در مورد تاریخ دارم. اونم این که با چه کدی میتونیم اختلاف روزهای بین دو تاریخ که در دو ادیت باکس هستند بدست اورد.

ممنون میشم راهنمایی کنین :rose:
 

evil_gates

اين نيز بگذرد ...
دوست عزيز
پيشنهاد ميكنم هر تاريخ رو به طور مجزا به تعداد روزهاي گذشته تبديل كنيد و بعد از حاصر كسر دو عدد نسبت به هم اختلاف روزها رو بدست بياريد.

کد:
time1$ = '1391/05/07'
time2$ = '1392/01/25'
y1 = VAL(StrCopy(time1$,1,4))*365
m1 = VAL(StrCopy(time1$,6,2)) - 1
If (m1<1) Then
  m1 = 12
End
If (m1<=6 & m1>1) Then
  m1 = m1*31
Else
  m1 = m1*30
End
d1 = VAL(StrCopy(time1$,9,2))
time1 = y1 + m1 + d1
***********
y2 = VAL(StrCopy(time2$,1,4))*365
m2 = VAL(StrCopy(time2$,6,2)) - 1
If (m2<1) Then
  m2 = 12
End
If (m2<=6 & m2>1) Then
  m2 = m2*31
Else
  m2 = m2*30
End
d2 = VAL(StrCopy(time2$,9,2))
time2 = y2 + m2 + d2
***********
difference = time2 - time1
Message("","difference")
 

mmb4us

Member
دوست عزيز
پيشنهاد ميكنم هر تاريخ رو به طور مجزا به تعداد روزهاي گذشته تبديل كنيد و بعد از حاصر كسر دو عدد نسبت به هم اختلاف روزها رو بدست بياريد.

کد:
time1$ = '1391/05/07'
time2$ = '1392/01/25'
y1 = VAL(StrCopy(time1$,1,4))*365
m1 = VAL(StrCopy(time1$,6,2)) - 1
If (m1<1) Then
  m1 = 12
End
If (m1<=6 & m1>1) Then
  m1 = m1*31
Else
  m1 = m1*30
End
d1 = VAL(StrCopy(time1$,9,2))
time1 = y1 + m1 + d1
***********
y2 = VAL(StrCopy(time2$,1,4))*365
m2 = VAL(StrCopy(time2$,6,2)) - 1
If (m2<1) Then
  m2 = 12
End
If (m2<=6 & m2>1) Then
  m2 = m2*31
Else
  m2 = m2*30
End
d2 = VAL(StrCopy(time2$,9,2))
time2 = y2 + m2 + d2
***********
difference = time2 - time1
Message("","difference")

دوست عزیز سلام ممنون از پاسخون:wink:

حالا چه جوری این دو تا تاریخ رو تو متغییر بریزم من هر کاری کردم نشد اخه میخوام دو تاریخ که در دو ادیت باکس هستند اختلافشونو بدست بیارم

:rose:
 

mmb4us

Member
سلام دوستان . تونستم تو متغغیر بریزم ولی یه اشکالی داره ممنون میشم بگین چطوری باید حل بشه

مشکل اینجاست که تاریخ ماه رو البته از ماه 1 تا 9 اگه قبلش صفر نذاریم اختلاف روزا اشتباه بدست میاد. یعنی اگه تاریخ رو به این صورت وارد کنیم 8/5/1391 جواب اشتباه در میاد

ممنون میشم بگین چطوری باید این مشکل حل میشه:rose:
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
کد:
time1$ = [COLOR=#800000]'1391/5/07'[/COLOR] 
time2$ = [COLOR=#800000]'1392/01/25'[/COLOR] 
[COLOR=#009000]***********************************************************[/COLOR] 
Delimiter$ = [COLOR=#800000]'/'[/COLOR] 
time1$ = time1$ + Delimiter$ 
time2$ = time2$ + Delimiter$ 
y1 = [COLOR=#000090][B]VAL[/B][/COLOR]([COLOR=#000090][B]GetArrayItem[/B][/COLOR](time1$,Delimiter$,[COLOR=#ff0000]1[/COLOR]))*[COLOR=#ff0000]365[/COLOR] 
m1 = [COLOR=#000090][B]VAL[/B][/COLOR]([COLOR=#000090][B]GetArrayItem[/B][/COLOR](time1$,Delimiter$,[COLOR=#ff0000]2[/COLOR])) - [COLOR=#ff0000]1[/COLOR] 
[COLOR=#0000FF]If[/COLOR] (m1<[COLOR=#ff0000]1[/COLOR]) [COLOR=#0000FF]Then[/COLOR] 
  m1 = [COLOR=#ff0000]12[/COLOR] 
[COLOR=#0000FF]End[/COLOR] 
[COLOR=#0000FF]If[/COLOR] (m1<=[COLOR=#ff0000]6[/COLOR] & m1>[COLOR=#ff0000]1[/COLOR]) [COLOR=#0000FF]Then[/COLOR] 
  m1 = m1*[COLOR=#ff0000]31[/COLOR] 
[COLOR=#0000FF]Else[/COLOR] 
  m1 = m1*[COLOR=#ff0000]30[/COLOR] 
[COLOR=#0000FF]End[/COLOR] 
d1 = [COLOR=#000090][B]VAL[/B][/COLOR]([COLOR=#000090][B]GetArrayItem[/B][/COLOR](time1$,Delimiter$,[COLOR=#ff0000]3[/COLOR])) 
time1 = y1 + m1 + d1 
[COLOR=#009000]***********[/COLOR] 
y2 = [COLOR=#000090][B]VAL[/B][/COLOR]([COLOR=#000090][B]GetArrayItem[/B][/COLOR](time2$,Delimiter$,[COLOR=#ff0000]1[/COLOR]))*[COLOR=#ff0000]365[/COLOR] 
m2 = [COLOR=#000090][B]VAL[/B][/COLOR]([COLOR=#000090][B]GetArrayItem[/B][/COLOR](time2$,Delimiter$,[COLOR=#ff0000]2[/COLOR])) - [COLOR=#ff0000]1[/COLOR] 
[COLOR=#0000FF]If[/COLOR] (m2<[COLOR=#ff0000]1[/COLOR]) [COLOR=#0000FF]Then[/COLOR] 
  m2 = [COLOR=#ff0000]12[/COLOR] 
[COLOR=#0000FF]End[/COLOR] 
[COLOR=#0000FF]If[/COLOR] (m2<=[COLOR=#ff0000]6[/COLOR] & m2>[COLOR=#ff0000]1[/COLOR]) [COLOR=#0000FF]Then[/COLOR] 
  m2 = m2*[COLOR=#ff0000]31[/COLOR] 
[COLOR=#0000FF]Else[/COLOR] 
  m2 = m2*[COLOR=#ff0000]30[/COLOR] 
[COLOR=#0000FF]End[/COLOR] 
d2 = [COLOR=#000090][B]VAL[/B][/COLOR]([COLOR=#000090][B]GetArrayItem[/B][/COLOR](time2$,Delimiter$,[COLOR=#ff0000]3[/COLOR])) 
time2 = y2 + m2 + d2 
[COLOR=#009000]***********[/COLOR] 
difference = time2 - time1 
[COLOR=#000090][B]Message[/B][/COLOR]("","difference")
 

m javad

کاربر متخصص
اینم برا اینکه تاریخ رو به هر صورتی وارد کنید:
کد رو باز نوشتم که بتونید متوجه بشید:
صورتهای مختلفی که تاریخ میتونه نوشته بشه:
کد:
time1$ = '1391/5/7'
time2$ = '1392/1/25'
****
time1$ = '1391/5/07'
time2$ = '1392/01/25'
****
time1$ = '91/5/07'
time2$ = '92/01/25'
****
time1$ = '91/5/7'
time2$ = '92/1/25'
****
time1$ = '91/05/07'
time2$ = '92/01/25'

********************************
کد رو حذف کردم
دلیل پست بالا زمانی که پست رو باز کردم نبود و جواب تکراری میشد و تنها قسمت بالا رو گذاشتم:-?
 
آخرین ویرایش:

NicSoft

Active Member
سلام دوستان

این کد یه مشکلی داره
مشکلش اینه که مثلا اگه
تاریخ 1392/01/01
از تاریه 1392/02/01
کم کنیم تا اختلافشون بدست بیاریم عدد منفی میشه = -330

یا مثلا اگه
تاریخ 1391/01/01
از تاریه 1392/02/01

کم کنیم تا اختلافشون بدست بیاریم عددش میشه 35

اساسا این کد با برج یک مشکل داره

میشه یه چاره براش پیدا کنید!!!!!!!
 
آخرین ویرایش:

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
تو کد بالا دوتا شرط هست که یه علامت = مساوی کم داره و باعث میشه ماه اول نادیده گرفته بشه
کد:
[/COLOR][COLOR=#0000FF]If[/COLOR][COLOR=#333333] (m2<=[/COLOR][COLOR=#ff0000]6[/COLOR][COLOR=#333333] & m2>[/COLOR][COLOR=#ff0000]1[/COLOR][COLOR=#333333]) [/COLOR][COLOR=#0000FF]Then  ==>  [/COLOR][COLOR=#0000FF]If[/COLOR][COLOR=#333333] (m2<=[/COLOR][COLOR=#ff0000]6[/COLOR][COLOR=#333333] & m2>[/COLOR][COLOR=#000080][B]=[/B][/COLOR][COLOR=#333333][/COLOR][COLOR=#ff0000]1[/COLOR][COLOR=#333333]) [/COLOR][COLOR=#0000FF]Then[/COLOR][COLOR=#333333]
تست کنید ببینید مشکل حل میشه، اگه بازم مشکل وجود داشت باید الگوریتم کلی عوض بشه
 

NicSoft

Active Member
با تشکر از شما

بازم همین اشه و همین کاسه!!!
من یه کدی نوشتم شبیه همینه ولی یه فرق هایی داره
میشه تستش کنید
شاید مشکلی داره که من متوجه نشدم

[PHPS]Data$ = '1392/06/14'
Data1$ = '1392/01/01'
Delimiter$ = '/'
********************************
time1$ = Data$ + Delimiter$
time2$ = Data1$ + Delimiter$
Y1 = VAL(GetArrayItem(time1$,Delimiter$,1))*360
M1 = VAL(GetArrayItem(time1$,Delimiter$,2))*30
D1 = VAL(GetArrayItem(time1$,Delimiter$,3))
****
Y2 = VAL(GetArrayItem(time2$,Delimiter$,1))*360
M2 = VAL(GetArrayItem(time2$,Delimiter$,2))*30
D2 = VAL(GetArrayItem(time2$,Delimiter$,3))
***********************************************************
Data1 = Y1 + M1 + D1
Data2 = Y2 + M2 + D2
DSH = Data1 - Data2[/PHPS]
 

neo_zin

New Member
این به نظرم کامل تره چون تمام استثنا ها و 29 روزه بودن و سال کبیسه را هم حساب میکنه

[CPPS]
int​
d1 = Date1.Day; int m1 = Date1.Month; int y1 = Date1.Year;
int d2 = Date2.Day; int m2 = Date2.Month; int y2 = Date2.Year;
int counter = 0;
while (true)
{
if (d1 == d2 && m1 == m2 && y1 == y2)
return counter;
d1++;
counter++;
if (d1 > _months[m1 - 1].NumberOfDays)
{
d1 = 1; m1++;
if (m1 > 12)
{
if (PersianDateConvertor.IsPersianLeapYear(y1))
counter++;
m1 = 1; y1++;
}
}
}​
[/CPPS]
 

جدیدترین ارسال ها

بالا