Каково правильное вычисление для получения общего количества часов времени входа и выхода
Привет, нужна помощь, ребята как можно скорее.. мне нужно получить точное общее количество часов, перечисленных в datagridview, как только я нажму кнопку заполнения ... имя заголовка столбца datagridview-дата,статус, время
эти ценности таковы
дата=22/03/2018 дата=22/03/2018
статус= статус= выход
время=7:30 Время= 14:00
дата=23/03/2018 дата=22/03/2018
статус=статус=выход
время= 6:45 Время = 17:00
общее количество часов в течение двух дней всегда 16.. как вы можете видеть, она вышла в 2 часа дня, а затем опоздала на 30 минут утром..
политика для своего времени
это 7 утра-5 вечера часов работы = 8 часов работы 2 часа являются брейктымами (не засчитываются)
утреннее время визуализации = 3,5
послеполуденное время визуализации = 4,5
итого = 8 часов
.
.
как я могу получить точное общее время работы сотрудника ?я думаю, что у меня есть ошибка этого кода.
Что я уже пробовал:
If txtID.Text = "" Then MsgBox("insert Employee ID") ElseIf txtID.Text <> "" Then Try totalMins = 0 conn.Open() query = New MySqlCommand("SELECT No, Name, date, status, position,TIME_FORMAT(STR_TO_DATE(time, '%l:%i:%s %p'), '%H:%i %p') AS time,HOUR(TIME_FORMAT(time, '%H:%i ')) AS hour,MINUTE(TIME_FORMAT(time,'%H:%i')) AS minute From cash_table WHERE No=" & txtID.Text & " AND (date BETWEEN '" & DateTimePicker2.Value.Date & "' AND '" & DateTimePicker3.Value.Date & "')", conn) dr = query.ExecuteReader() If dr.HasRows Then Do While dr.Read() 'Console.WriteLine(dr.GetInt32(0) & vbTab & dr.GetString(1)) txtName.Text = dr.GetString("Name") txtPosition.Text = dr.GetString("position") arr(0) = dr.Item("date") arr(1) = dr.Item("status") 'arr(2) = dr.Item("position") arr(2) = dr.Item("time") DataGridView1.Rows.Add(arr) stat = dr.Item("status") timeHr = dr.Item("hour") timeMin = dr.Item("minute") If (stat = "IN") Then lateMin = 0 extMin = 0 If (timeHr > 7) Then lateMin += (timeHr - 7) * 60 End If If (timeHr >= 7) Then If (timeMin > 0) Then lateMin += (timeMin) End If End If ElseIf (stat = "OUT") Then If (timeHr > 17) Then extMin += (timeHr - 17) * 60 End If If (timeHr >= 17) Then If (timeMin >= 15) Then extMin += (timeMin) End If End If If (timeHr > 17) Then extMin += (3.5 - (timeHr - 13)) * 60 + timeMin - 16 End If totalMins += (480 - lateMin) + (extMin) totalMins = Val(totalMins) - Val(16) End If Loop Else MsgBox("No Records Found!", MsgBoxStyle.Information, "Search") End If dr.Dispose() TextBox4.Text = Math.Floor(totalMins / 60) & ":" & (totalMins Mod 60) Catch ex As Exception MsgBox(ex.Message) Finally dr.Dispose() conn.Close() End Try If txtID.Text = "" Then DataGridView1.Rows.Clear() txtName.Clear() txtPosition.Clear() End If End If
Richard MacCutchan
Используйте правильные типы DATETIME, чтобы вы могли легко вычислять точные временные интервалы.
CaThey Joy Galias
Пример пожалуйста, я только начинающий на этот код