PDA

View Full Version : محاسبه گردش زمان بعد از 24 ساعت



joker_pok
پنج شنبه 12 آبان 1390, 01:51 صبح
سلام دوستان من یه برنامه نوشتم که ورود و خروج رو به صورت ساعت دریافت می کنه مثل زیر

08:00 تا 12:00 اختلاف این ها میشه 04:00 ساعته درسته تا اینجا

حالا من میخوام این ساعاتی که مثل مرخصی ساعتی کر مشوند باهم جمع شوند همین 04:00 که بدست اومد به فرض مثال یک پرسنل در شرکت طول یک سال 120:10 دقیقه مرخصی داره میخوام ببینم این جمع رو چه جوری بنویسم چون بعد 24:00 دیگه جمع نمی کنه و جمع ساعات دوباره صفر میشه و از اول محاسبه می کنه چی کار کنم که از 24:00 ساعت بیشتر جمع کنه ؟ یعنی شما این 3 زمان رو جمع کنین ببینین منظورمو

12:00+12:00+10:00 = ؟ منظور اینه ممنون میشم راهنمایی کنین .

vbhamed
پنج شنبه 12 آبان 1390, 10:26 صبح
سلام

ابتدا ساعات مرخصي رو به دقيقه تبديل كنيد، سپس دقايق رو با هم جمع كنيد و بعد دوباره تبديل به ساعت و دقيقه كنيد
مثلا 4:20 ميشه 20 + 60 * 4 يعني كلا 260 دقيقه
و 2730 دقيقه ميشه 45 = 60 \ 2730 + 30 دقيقه يعني كلا 45 ساعت و سي دقيقه يعني 45:30

joker_pok
شنبه 14 آبان 1390, 10:53 صبح
سلام

ابتدا ساعات مرخصي رو به دقيقه تبديل كنيد، سپس دقايق رو با هم جمع كنيد و بعد دوباره تبديل به ساعت و دقيقه كنيد
مثلا 4:20 ميشه 20 + 60 * 4 يعني كلا 260 دقيقه
و 2730 دقيقه ميشه 45 = 60 \ 2730 + 30 دقيقه يعني كلا 45 ساعت و سي دقيقه

دوست عزیز منظور من اینه به فرض من با دستور SUM از SQL تو برنامه 10 تا ساعت رو باهم جمع زدم ، این زمان بدست اومده رو توی DataField یه تکست ذخیره کردم حالا من میخوام این SUM رو جوری ذخیره کنم که وقتی مجموع ساعت من از 24:00 ساعت بیشتر میشه دوباره گردش به پایین نکنه مثلا حاص جمع ما شد 37:00 اینو نشون بده نه اینکه بعد از 24:00 ساعت گردش به بعد بخوره

vbhamed
یک شنبه 15 آبان 1390, 00:40 صبح
سلام

لطفا يك بار ديگه با دقت بيشتر پست قبلي رو بخونيد

joker_pok
یک شنبه 15 آبان 1390, 13:02 عصر
عزیزم حرف شما درسته نگفتم که غلطه اما با محاسبات من جور در نمیاد ببین

بزار اینطوری بگم الان دستور sql من اجرا میشه تو برنامه خوب 10 تا ساعت جمع شده رو به من نشون میده شما حساب کن مجموع این 10 تا ساعت اگه هر کدوم رو 12:00 ساعت بگیری چقدر میشه ؟ خوب این مجموع رو به من تو لحظه نمایش نشون میده حالا وقتی جمع کرد به جای مجموع 120:00 ساعت نشون میده که 00:00 حالا من این 00:00 رو چه جوری با فرمول شما کد کنم ؟ شما یه نمونه برنامه کوچیک به من بده تا ببینم منظور دقیق شما چیه نشد من برنامه رو میزارم اینجا شما ببینید و نظر بدین

joker_pok
یک شنبه 15 آبان 1390, 13:32 عصر
77476
77477
77478
77479
این هم کد نویسی برنامه من حالا نظر دقیق رو میتونید بدید .

M.T.P
یک شنبه 15 آبان 1390, 15:30 عصر
سلام
تابع Sum برای جمع بندی ساعت نیست.
تابع Sum (http://www.w3schools.com/sql/sql_func_sum.asp)

دوستمون vbhamed الگوریتم رو بیان فرمودند و پیاده سازی اون بصورت کد رو بعده شما گذاشتند.

در زیر دو تابع براتون گذاشتم که وظیفه اونها تبدیل ساعت به دقیقه و دقیقه به ساعت هست.
نمونه کد:



Private Sub Form_Load()
Dim IntMinutes As Long
Dim ArrTime(3) As Date
Dim IntX As Integer

ArrTime(0) = "21:10"
ArrTime(1) = "12:00"
ArrTime(2) = "19:40"
ArrTime(3) = "17:20"
For IntX = 0 To 3
IntMinutes = IntMinutes + TimeToMin(ArrTime(IntX))
Next IntX
MsgBox MinToTime(IntMinutes)
End Sub

Function TimeToMin(TheTime As Date) As Integer
Dim IntHour As Integer
Dim IntMinute As Integer
Dim IntResult As Integer

IntHour = Hour(TheTime)
IntMinute = Minute(TheTime)
IntResult = (IntHour * 60) + IntMinute
TimeToMin = IntResult
End Function

Function MinToTime(TheMinute As Long) As String
Dim IntHour As Long
Dim IntMinute As Long
Dim StrResult As String

IntHour = (TheMinute \ 60)
IntMinute = (TheMinute \ 60) Mod 60
StrResult = Format$(IntHour, "##") & ":" & Format$(IntMinute, "00")
MinToTime = StrResult
End Function


با توجه به توابع فوق کاری که شما باید انجام بدید ، گذاشتن یک حلقه و ارسال مقادیر فیلد ساعت به عنوان پارامتر به تابع TimeToMin و ذخیره و جمع کردن مقدار برگشتی در یک متغیر به عنوان مجموع دقایق هست.
در پایان هم متغیر مجموع دقایق رو با تابع MinToTime به ساعت و دقیقه تبدیل و نمایش بدید.

joker_pok
یک شنبه 15 آبان 1390, 15:34 عصر
دست گلتون درد نکنه ممنون من اشتباهی فهمیدم منظور آقا حامد رو مرسی .
آقا من اینطوری عوض کردم درسته اگه نیست لطفا کد رو برام ادیت کنین . ممنون ازتون

Dim IntMinutes As Long
Dim ArrTime As Date
Dim sum As Date
Dim IntX As Integer

For ArrTime = 1 To Adodc1.Recordset.RecordCount
sum = sum + Adodc1.Recordset.Fields("saat")
Next ArrTime
IntMinutes = IntMinutes + TimeToMin(sum)

MsgBox MinToTime(IntMinutes)

M.T.P
یک شنبه 15 آبان 1390, 19:03 عصر
Dim IntMinutes As Long
Dim StrTime As Date
Dim IntX As Integer

For IntX = 1 To Adodc1.Recordset.RecordCount
StrTime = Adodc1.Recordset.Fields("saat").Value
IntMinutes = IntMinutes + TimeToMin(StrTime)
Next IntX
MsgBox MinToTime(IntMinutes)