View Full Version : مشکل با زمان
kivoon
یک شنبه 08 آذر 1388, 20:29 عصر
من میخوام مثلا ساعت 16:30 منحی 20:30 بشه جواب بده 04:00 ساعت اضافه کاری
اگه ممکنه سریع جواب بدین (ممنون)
quantomquery
یک شنبه 08 آذر 1388, 21:21 عصر
اول ساعت ها رو به دقیقه تبدیل کنید با این کار شما بدست می اورید که از 00:00 تا این ساعت چند دقیقه است
سپس این دو عدد را تفریق کنید با این کار شما اختلاف این دو ساعت را به دقیقه بدست اوردید
حالا اونو به ساعت تبدیل کنید
kivoon
سه شنبه 10 آذر 1388, 17:18 عصر
دستت درد نکنه دوست عزیز می تونی با cod جوابمو بدی ممنون میشم
xxxxx_xxxxx
سه شنبه 10 آذر 1388, 20:59 عصر
دستت درد نکنه دوست عزیز می تونی با cod جوابمو بدی ممنون میشم
کسی نبود التماس می کونم
سلام،
درخواست برنامه ممنوع هست. راه حل گفته شده می تونید برنامه شو بنویسید و اگر در حین نوشتن برنامه با مشکل برخوردید، موضوع رو اینجا مطرح کنید.
راه حل دوم:
دقیقه ها رو از هم کم کنید، اگر حاصل منفی شد، یک واحد از ساعت کم کنید و 60 واحد به دقیقه اضافه کنید. (همون کاری که تو تفریق اعداد در مبنای 10 انجام میدیم\ حالا اینجا مبنای کار 60 هست.) نتیجه این عمل میشه دقیقه. ساعت ها هم از هم کم کنید.
mpmsoft
سه شنبه 10 آذر 1388, 22: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, 14:18 عصر
من وقتی از تابه بالا استفاده می کنم به FitN ارور می ده
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:
Sub or Function not defined
---------------------------
OK Help
---------------------------
xxxxx_xxxxx
دوشنبه 28 دی 1388, 15:43 عصر
جمع و تفریق ساعت هم مثل اعداد معمولی هست. یعنی ثانیه ها رو با هم جمع/تفریق می کنیم، دقیقه ها رو با هم و ساعت ها رو باهم.
حالا اگر حاصل تفریق ثانیه ها کمتر از 0 شد، یک واحد از دقیقه کم می کنیم و 60 واحد به ثانیه اضافه می کنیم. اگر حاصل جمع ثانیه ها بیشتر از 59 شد، یک واحد به دقیقه اضافه می کنیم و 60 واحد از ثانیه کم می کنیم.
برای جمع و تفریق دقیقه هم دقیقاً به همین صورت.
برای ساعت هم اگر حاصل بزرگتر از 23 شد یک واحد به تاریخ اضافه می کنیم و ...
تقریباً مشابه جمع و تفریق اعداد معمولی هست با این تفاوت که در اعداد معمولی مبنای کار ما 10 هست اما در اینجا 60
-----------
حالا بعضی ها ساعت:دقیقه:ثانیه رو به ثانیه تبدیل می کنند بعد جمع و تفریق لازم رو انجام میدن و دوباره عدد حاصل رو به ساعت:دقیقه:ثانیه برمیگردونند.
niko2008
جمعه 24 اردیبهشت 1389, 23: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, 22:34 عصر
داداش یکی نیست نظر بده؟
M.T.P
یک شنبه 26 اردیبهشت 1389, 13:05 عصر
به مدیر mpmsoft پیام خصوصی بده ، شاید به این تاپیک وقت نکنه سر بزنه
mpmsoft
یک شنبه 26 اردیبهشت 1389, 16: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, 16: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, 01:25 صبح
دوستان عزیز در این سورس به Fulltrim ارور میده
عزیز این سورس به Fulltrim ارور میده چه توان کرد؟
mpmsoft
سه شنبه 28 اردیبهشت 1389, 10:49 صبح
پست قبلی اصلاح شده و تابع FullTrim اضافه گردید
niko2008
سه شنبه 28 اردیبهشت 1389, 20:45 عصر
پست قبلی اصلاح شده و تابع FullTrim اضافه گردید
دوست عزیز به تابع FullTrim ارور میده
Dr.Bronx
سه شنبه 28 اردیبهشت 1389, 21: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, 08:18 صبح
از اساتید محترم نظری در این باره ندارند که چطور میتونم بین دو تاریخ مدت دو زمان رو پیدا کنم؟
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.