PDA

View Full Version : مشکل با زمان



kivoon
یک شنبه 08 آذر 1388, 19:29 عصر
من میخوام مثلا ساعت 16:30 منحی 20:30 بشه جواب بده 04:00 ساعت اضافه کاری
اگه ممکنه سریع جواب بدین (ممنون)

quantomquery
یک شنبه 08 آذر 1388, 20:21 عصر
اول ساعت ها رو به دقیقه تبدیل کنید با این کار شما بدست می اورید که از 00:00 تا این ساعت چند دقیقه است
سپس این دو عدد را تفریق کنید با این کار شما اختلاف این دو ساعت را به دقیقه بدست اوردید
حالا اونو به ساعت تبدیل کنید

kivoon
سه شنبه 10 آذر 1388, 16:18 عصر
دستت درد نکنه دوست عزیز می تونی با cod جوابمو بدی ممنون میشم

xxxxx_xxxxx
سه شنبه 10 آذر 1388, 19:59 عصر
دستت درد نکنه دوست عزیز می تونی با cod جوابمو بدی ممنون میشم

کسی نبود التماس می کونم
سلام،
درخواست برنامه ممنوع هست. راه حل گفته شده می تونید برنامه شو بنویسید و اگر در حین نوشتن برنامه با مشکل برخوردید، موضوع رو اینجا مطرح کنید.

راه حل دوم:
دقیقه ها رو از هم کم کنید، اگر حاصل منفی شد، یک واحد از ساعت کم کنید و 60 واحد به دقیقه اضافه کنید. (همون کاری که تو تفریق اعداد در مبنای 10 انجام میدیم\ حالا اینجا مبنای کار 60 هست.) نتیجه این عمل میشه دقیقه. ساعت ها هم از هم کم کنید.

mpmsoft
سه شنبه 10 آذر 1388, 21:38 عصر
می تونی از این تابع استفاده کنی خودم نوشتم و حتی می تونه فاصله بین دو تاریخ رو هم بدست بیاره


Function B2D(ByVal T1 As String, ByVal T2 As String) As String
On Error Resume Next
'محاسبه فاصله بین دو زمان شامل تاریخ و ساعت دقیقه و ثانیه
'õSource to be T1 = yyyy/mm/dd hh:mm:ss is Upper
'Source to be T2 = yyyy/mm/dd hh:mm:ss is Lower
'خروجی برحسب مقدار اختلاف = yyyy/mm/dd hh:mm:ss

Dim Y1, M1, D1, H1, N1, S1 As Integer
Dim Y2, m2, D2, H2, N2, S2 As Integer
Dim y, m, d, h, n, S As Integer
y = 0: m = 0: d = 0: h = 0: n = 0: S = 0

If T1 = T2 Then B2D = "0000/00/00 00:00:00": Exit Function
If T1 < T2 Then tmp = T1: T1 = T2: T2 = tmp
Y1 = Val(Left(T1, 4)): M1 = Val(Mid(T1, 6, 2)): D1 = Val(Mid(T1, 9, 2)): H1 = Val(Mid(T1, 12, 2)): N1 = Val(Mid(T1, 15, 2)): S1 = Val(Mid(T1, 18, 2))
Y2 = Val(Left(T2, 4)): m2 = Val(Mid(T2, 6, 2)): D2 = Val(Mid(T2, 9, 2)): H2 = Val(Mid(T2, 12, 2)): N2 = Val(Mid(T2, 15, 2)): S2 = Val(Mid(T2, 18, 2))

If S1 = S2 Then
S = 0
Else

If S1 > S2 Then S = S1 - S2 Else S = (60 - S2) + S1: n = n - 1
End If

If N1 = N2 Then
If n < 0 Then h = h - 1: n = n + (60 - N2) + N1 Else n = 0
Else

If N1 > N2 Then n = n + N1 - N2 Else n = n + (60 - N2) + N1: h = h - 1
End If

If H1 = H2 Then
If h < 0 Then d = d - 1: h = h + (24 - H2) + H1 Else h = 0
Else

If H1 > H2 Then h = h + H1 - H2 Else h = h + (24 - H2) + H1: d = d - 1
End If

If D1 = D2 Then
If d < 0 Then m = m - 1: d = d + (31 - D2) + D1 Else d = 0
Else

If D1 > D2 Then d = d + D1 - D2 Else d = d + (31 - D2) + D1: m = m - 1
End If

If M1 = m2 Then
If m < 0 Then y = y - 1: m = m + (12 - m2) + M1 Else m = 0
Else

If M1 > m2 Then m = m + M1 - m2 + 1 Else m = m + (12 - m2) + M1: y = y - 1
End If

If Y1 = Y2 Then y = 0 Else y = Y1 - Y2 + y

B2D = FitN(y, 4) & "/" & FitN(m, 2) & "/" & FitN(d, 2) & " " & FitN(h, 2) & ":" & FitN(n, 2) & ":" & FitN(S, 2)
End Function


مثال:


Msgbox B2D("1388/09/10 12:20:00","1388/09/10 15:20:00")

javadt
دوشنبه 28 دی 1388, 13:18 عصر
من وقتی از تابه بالا استفاده می کنم به FitN ارور می ده
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:

Sub or Function not defined
---------------------------
OK Help
---------------------------

xxxxx_xxxxx
دوشنبه 28 دی 1388, 14:43 عصر
جمع و تفریق ساعت هم مثل اعداد معمولی هست. یعنی ثانیه ها رو با هم جمع/تفریق می کنیم، دقیقه ها رو با هم و ساعت ها رو باهم.
حالا اگر حاصل تفریق ثانیه ها کمتر از 0 شد، یک واحد از دقیقه کم می کنیم و 60 واحد به ثانیه اضافه می کنیم. اگر حاصل جمع ثانیه ها بیشتر از 59 شد، یک واحد به دقیقه اضافه می کنیم و 60 واحد از ثانیه کم می کنیم.

برای جمع و تفریق دقیقه هم دقیقاً به همین صورت.
برای ساعت هم اگر حاصل بزرگتر از 23 شد یک واحد به تاریخ اضافه می کنیم و ...

تقریباً مشابه جمع و تفریق اعداد معمولی هست با این تفاوت که در اعداد معمولی مبنای کار ما 10 هست اما در اینجا 60

-----------
حالا بعضی ها ساعت:دقیقه:ثانیه رو به ثانیه تبدیل می کنند بعد جمع و تفریق لازم رو انجام میدن و دوباره عدد حاصل رو به ساعت:دقیقه:ثانیه برمیگردونند.

niko2008
جمعه 24 اردیبهشت 1389, 22:57 عصر
می تونی از این تابع استفاده کنی خودم نوشتم و حتی می تونه فاصله بین دو تاریخ رو هم بدست بیاره


Function B2D(ByVal T1 As String, ByVal T2 As String) As String
On Error Resume Next
'محاسبه فاصله بین دو زمان شامل تاریخ و ساعت دقیقه و ثانیه
'õSource to be T1 = yyyy/mm/dd hh:mm:ss is Upper
'Source to be T2 = yyyy/mm/dd hh:mm:ss is Lower
'خروجی برحسب مقدار اختلاف = yyyy/mm/dd hh:mm:ss

Dim Y1, M1, D1, H1, N1, S1 As Integer
Dim Y2, m2, D2, H2, N2, S2 As Integer
Dim y, m, d, h, n, S As Integer
y = 0: m = 0: d = 0: h = 0: n = 0: S = 0

If T1 = T2 Then B2D = "0000/00/00 00:00:00": Exit Function
If T1 < T2 Then tmp = T1: T1 = T2: T2 = tmp
Y1 = Val(Left(T1, 4)): M1 = Val(Mid(T1, 6, 2)): D1 = Val(Mid(T1, 9, 2)): H1 = Val(Mid(T1, 12, 2)): N1 = Val(Mid(T1, 15, 2)): S1 = Val(Mid(T1, 18, 2))
Y2 = Val(Left(T2, 4)): m2 = Val(Mid(T2, 6, 2)): D2 = Val(Mid(T2, 9, 2)): H2 = Val(Mid(T2, 12, 2)): N2 = Val(Mid(T2, 15, 2)): S2 = Val(Mid(T2, 18, 2))

If S1 = S2 Then
S = 0
Else

If S1 > S2 Then S = S1 - S2 Else S = (60 - S2) + S1: n = n - 1
End If

If N1 = N2 Then
If n < 0 Then h = h - 1: n = n + (60 - N2) + N1 Else n = 0
Else

If N1 > N2 Then n = n + N1 - N2 Else n = n + (60 - N2) + N1: h = h - 1
End If

If H1 = H2 Then
If h < 0 Then d = d - 1: h = h + (24 - H2) + H1 Else h = 0
Else

If H1 > H2 Then h = h + H1 - H2 Else h = h + (24 - H2) + H1: d = d - 1
End If

If D1 = D2 Then
If d < 0 Then m = m - 1: d = d + (31 - D2) + D1 Else d = 0
Else

If D1 > D2 Then d = d + D1 - D2 Else d = d + (31 - D2) + D1: m = m - 1
End If

If M1 = m2 Then
If m < 0 Then y = y - 1: m = m + (12 - m2) + M1 Else m = 0
Else

If M1 > m2 Then m = m + M1 - m2 + 1 Else m = m + (12 - m2) + M1: y = y - 1
End If

If Y1 = Y2 Then y = 0 Else y = Y1 - Y2 + y

B2D = FitN(y, 4) & "/" & FitN(m, 2) & "/" & FitN(d, 2) & " " & FitN(h, 2) & ":" & FitN(n, 2) & ":" & FitN(S, 2)
End Function


مثال:


Msgbox B2D("1388/09/10 12:20:00","1388/09/10 15:20:00")


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

niko2008
شنبه 25 اردیبهشت 1389, 21:34 عصر
داداش یکی نیست نظر بده؟

M.T.P
یک شنبه 26 اردیبهشت 1389, 12:05 عصر
به مدیر mpmsoft پیام خصوصی بده ، شاید به این تاپیک وقت نکنه سر بزنه

mpmsoft
یک شنبه 26 اردیبهشت 1389, 15:12 عصر
شرمنده که دیر شد





Function B2D(ByVal T1 As String, ByVal T2 As String) As String
On Error Resume Next

'Source to be T1 = yyyy/mm/dd hh:mm:ss is Upper
'Source to be T2 = yyyy/mm/dd hh:mm:ss is Lower

Dim Y1, M1, d1, H1, N1, S1 As Integer
Dim Y2, m2, D2, H2, N2, S2 As Integer
Dim y, m, d, h, n, S As Integer
y = 0: m = 0: d = 0: h = 0: n = 0: S = 0

If T1 = T2 Then B2D = "0000/00/00 00:00:00": Exit Function
If T1 < T2 Then tmp = T1: T1 = T2: T2 = tmp
Y1 = Val(Left(T1, 4)): M1 = Val(Mid(T1, 6, 2)): d1 = Val(Mid(T1, 9, 2)): H1 = Val(Mid(T1, 12, 2)): N1 = Val(Mid(T1, 15, 2)): S1 = Val(Mid(T1, 18, 2))
Y2 = Val(Left(T2, 4)): m2 = Val(Mid(T2, 6, 2)): D2 = Val(Mid(T2, 9, 2)): H2 = Val(Mid(T2, 12, 2)): N2 = Val(Mid(T2, 15, 2)): S2 = Val(Mid(T2, 18, 2))

If S1 = S2 Then
S = 0
Else

If S1 > S2 Then S = S1 - S2 Else S = (60 - S2) + S1: n = n - 1
End If

If N1 = N2 Then
If n < 0 Then h = h - 1: n = n + (60 - N2) + N1 Else n = 0
Else

If N1 > N2 Then n = n + N1 - N2 Else n = n + (60 - N2) + N1: h = h - 1
End If

If H1 = H2 Then
If h < 0 Then d = d - 1: h = h + (24 - H2) + H1 Else h = 0
Else

If H1 > H2 Then h = h + H1 - H2 Else h = h + (24 - H2) + H1: d = d - 1
End If

If d1 = D2 Then
If d < 0 Then m = m - 1: d = d + (31 - D2) + d1 Else d = 0
Else

If d1 > D2 Then d = d + d1 - D2 Else d = d + (31 - D2) + d1: m = m - 1
End If

If M1 = m2 Then
If m < 0 Then y = y - 1: m = m + (12 - m2) + M1 Else m = 0
Else

If M1 > m2 Then m = m + M1 - m2 + 1 Else m = m + (12 - m2) + M1: y = y - 1
End If

If Y1 = Y2 Then y = 0 Else y = Y1 - Y2 + y

B2D = FitN(y, 4) & "/" & FitN(m, 2) & "/" & FitN(d, 2) & " " & FitN(h, 2) & ":" & FitN(n, 2) & ":" & FitN(S, 2)
End Function






Function FitN(ByVal Source As String, ByVal Fit As Long) As String
On Error Resume Next
If Len(Trim$(Source)) = Fit Then
FitN = Fulltrim$(Source)
ElseIf Len(Trim$(Source)) > Fit Then
FitN = Right(Trim$(Source), Fit)
Else
FitN = Fill("0", Fit - Len(Fulltrim$(Source))) & Fulltrim$(Source)
End If

End Function






Function Fill(ByVal Source As String, ByVal Num As Integer) As String
On Error Resume Next
Dim t As String

For i = 1 To Num
t = t + Source
Next

Fill = t
End Function





Function Fulltrim(ByVal Source As String) As String
On Error Resume Next
Dim t As String
t = ""

For i = 1 To Len(Source)

If Not Mid$(Source, i, 1) = " " Then t = t + Mid$(Source, i, 1)
Next

Fulltrim = t
End Function

niko2008
یک شنبه 26 اردیبهشت 1389, 15:36 عصر
شرمنده که دیر شد





Function B2D(ByVal T1 As String, ByVal T2 As String) As String
On Error Resume Next


'Source to be T1 = yyyy/mm/dd hh:mm:ss is Upper
'Source to be T2 = yyyy/mm/dd hh:mm:ss is Lower


Dim Y1, M1, d1, H1, N1, S1 As Integer
Dim Y2, m2, D2, H2, N2, S2 As Integer
Dim y, m, d, h, n, S As Integer
y = 0: m = 0: d = 0: h = 0: n = 0: S = 0


If T1 = T2 Then B2D = "0000/00/00 00:00:00": Exit Function
If T1 < T2 Then tmp = T1: T1 = T2: T2 = tmp
Y1 = Val(Left(T1, 4)): M1 = Val(Mid(T1, 6, 2)): d1 = Val(Mid(T1, 9, 2)): H1 = Val(Mid(T1, 12, 2)): N1 = Val(Mid(T1, 15, 2)): S1 = Val(Mid(T1, 18, 2))
Y2 = Val(Left(T2, 4)): m2 = Val(Mid(T2, 6, 2)): D2 = Val(Mid(T2, 9, 2)): H2 = Val(Mid(T2, 12, 2)): N2 = Val(Mid(T2, 15, 2)): S2 = Val(Mid(T2, 18, 2))


If S1 = S2 Then
S = 0
Else


If S1 > S2 Then S = S1 - S2 Else S = (60 - S2) + S1: n = n - 1
End If


If N1 = N2 Then
If n < 0 Then h = h - 1: n = n + (60 - N2) + N1 Else n = 0
Else


If N1 > N2 Then n = n + N1 - N2 Else n = n + (60 - N2) + N1: h = h - 1
End If


If H1 = H2 Then
If h < 0 Then d = d - 1: h = h + (24 - H2) + H1 Else h = 0
Else


If H1 > H2 Then h = h + H1 - H2 Else h = h + (24 - H2) + H1: d = d - 1
End If


If d1 = D2 Then
If d < 0 Then m = m - 1: d = d + (31 - D2) + d1 Else d = 0
Else


If d1 > D2 Then d = d + d1 - D2 Else d = d + (31 - D2) + d1: m = m - 1
End If


If M1 = m2 Then
If m < 0 Then y = y - 1: m = m + (12 - m2) + M1 Else m = 0
Else


If M1 > m2 Then m = m + M1 - m2 + 1 Else m = m + (12 - m2) + M1: y = y - 1
End If


If Y1 = Y2 Then y = 0 Else y = Y1 - Y2 + y


B2D = FitN(y, 4) & "/" & FitN(m, 2) & "/" & FitN(d, 2) & " " & FitN(h, 2) & ":" & FitN(n, 2) & ":" & FitN(S, 2)
End Function







Function FitN(ByVal Source As String, ByVal Fit As Long) As String
On Error Resume Next
If Len(Trim$(Source)) = Fit Then
FitN = Fulltrim$(Source)
ElseIf Len(Trim$(Source)) > Fit Then
FitN = Right(Trim$(Source), Fit)
Else
FitN = Fill("0", Fit - Len(Fulltrim$(Source))) & Fulltrim$(Source)
End If


End Function







Function Fill(ByVal Source As String, ByVal Num As Integer) As String
On Error Resume Next
Dim t As String


For i = 1 To Num
t = t + Source
Next


Fill = t
End Function



دوست عزیز شرمنده باز به این کد FitN = Fulltrim$(Source) ارور میده

niko2008
سه شنبه 28 اردیبهشت 1389, 00:25 صبح
دوستان عزیز در این سورس به Fulltrim ارور میده

عزیز این سورس به Fulltrim ارور میده چه توان کرد؟

mpmsoft
سه شنبه 28 اردیبهشت 1389, 09:49 صبح
پست قبلی اصلاح شده و تابع FullTrim اضافه گردید

niko2008
سه شنبه 28 اردیبهشت 1389, 19:45 عصر
پست قبلی اصلاح شده و تابع FullTrim اضافه گردید

دوست عزیز به تابع FullTrim ارور میده

Dr.Bronx
سه شنبه 28 اردیبهشت 1389, 20:20 عصر
این زمان رو به ثانیه تبدیل می کنه

Public Function Con_Time_To_Second(ByVal strTime As String) As Long

On Error Resume Next

Dim strTemp() As String
Dim i As Integer

strTemp = Split(strTime, ":")
Con_Time_To_Second = 0

For i = 0 To UBound(strTemp)
Con_Time_To_Second = Con_Time_To_Second + (val(strTemp(i)) * (60 ^ (UBound(strTemp) - i)))
Next

End Function

این یکی برعکس ثانیه رو ساعت تبدیل می کنه

Public Function Con_Secont_To_Time(ByVal Second As Long) As String
On Error Resume Next

Dim s As Long, m As Long, H As Long
Dim Manfi As Boolean

If Second < 0 Then
Manfi = True
Second = Second * (-1)
End If

H = Second \ 3600
m = (Second Mod 3600) \ 60
s = (Second Mod 3600) Mod 60

Con_Secont_To_Time = H & ":" & IIf(m > 9, m, "0" & m) & ":" & IIf(s > 9, s, "0" & s)

If Manfi = True Then
Con_Secont_To_Time = Con_Secont_To_Time & "-"
End If

End Function

طریقه استفاده :

Time 1 : 10:20:20
Time 2 : 20:18:30

اول میاین تایم ها رو به ثانیه تبدیل می کنیم
Time_1 = Con_Time_To_Second(Time1)
Time_2 = Con_Time_To_Second(Time2)

حالا که این دوتا رو به دست آوردید
از هم کم میکنید ، به ساعت تبدیل می کنید و ادامه کار

text1.text = Con_Secont_To_Time(Time_1 - Time_2)

موفق باشید ./

niko2008
دوشنبه 03 خرداد 1389, 07:18 صبح
از اساتید محترم نظری در این باره ندارند که چطور میتونم بین دو تاریخ مدت دو زمان رو پیدا کنم؟