[COLOR="Blue"]Private[/COLOR] StartTime [COLOR="Blue"]as String[/COLOR] [COLOR="Green"]'время начала работы[/COLOR]
[COLOR="Blue"]Private[/COLOR] EndTime [COLOR="Blue"]as String[/COLOR] [COLOR="Green"]'время окончания работы[/COLOR]
[COLOR="Blue"]Sub[/COLOR] Начало_Работы() [COLOR="Green"]'вызиваеться по началу работы[/COLOR]
StartTime = Time
[COLOR="Blue"]End Sub[/COLOR]
[COLOR="Blue"]Sub[/COLOR] Окончане_Работы() [COLOR="Green"]'вызиваеться по окончанию работы[/COLOR]
endHour = Mid(Time, 1, 1) & Mid(Time, 2, 1)
endMinute = Mid(Time, 4, 1) & Mid(Time, 5, 1)
endSecond = Mid(Time, 7, 1) & Mid(Time, 8, 1)
startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
startMinute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
startSecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)
xHour = endHour - startHour
[COLOR="Blue"]If[/COLOR] endMinute < startMinute [COLOR="Blue"]Then Goto[/COLOR] 3
xMinute = endMinute - startMinute
3
[COLOR="Blue"]If[/COLOR] endSecond < startSecond [COLOR="Blue"]Then Goto[/COLOR] 4
xSecond = endSecond - startSecond
4
[COLOR="Green"]'короче до секунды я думаю выщитывать не будем.
'такая точность не к чему.[/COLOR]
EndTime = xHour & ":" & xMinute & ":" & xSecond
MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & xHour * 100 & "$"
[COLOR="Blue"]End Sub[/COLOR]
Помогите решить один вопрос с датой ...
Смысл вопроса в следующем..
Разрабатываю простенькую систему учета зала интернет-кафе в Акцессе 2003...
Итак, имеется начальное время работы клиента и конечное..
Задача: нужно из конечного времени вычесть начальное, получить время работы и умножить его на тариф...
Всем ответившим огромное спасибо ...
xHour = endHour - startHour
в этой строке эррорит , говорит не соответствие типов... :confused:
xHour = endHour - startHour
в этой строке эррорит , говорит не соответствие типов... :confused:[/QUOTE]
Блин, я думал ты сам догадаешся, просто лень писать было...
В начале процедуры:
[FONT="Courier New"]Dim xHour As Integer
-----------------
...
-----------------
xHour = Int(endHour) - Int(startHour)[/FONT]
Вот теперь должно работать, должно, потому-что я не проверял :)
Но если вдруг я ошибся - пиши!
Объявил переменную xHour как целочисленное..
Но снова тайп мисматч здесь: xHour = Int(endHour) - Int(startHour) :confused:
Спасай, гитаристы - добрые люди, по себе знаю :)
Показывает деньги с точностью до минуты!
Код:
Private StartTime As String 'время начала работы
Private EndTime As String 'время окончания работы
Sub St() 'вызиваеться по началу работы
StartTime = Time
End Sub
Sub En() 'вызиваеться по окончанию работы
Dim Tm As String
Tm = Time
Dim xHour As String
Dim xMinute As String
Dim xSecond As String
Dim EndMinute As Double
endHour = Mid(Tm, 1, 1) & Mid(Tm, 2, 1)
EndMinute = Mid(Tm, 4, 1) & Mid(Tm, 5, 1)
endSecond = Mid(Tm, 7, 1) & Mid(Tm, 8, 1)
startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
startMinute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
startSecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)
'/// Ето самая важная часть ///
If EndMinute < startMinute Then 'сколько часав трудился
xHour = startHour
Else
xHour = endHour - startHour
End If
If EndMinute < startMinute Then 'сколько минут
xMinute = startMinute
Else
xMinute = EndMinute - startMinute
End If
If endSecond < startSecond Then 'сколько секунд (по-приколу)
xSecond = startSecond
Else
xSecond = endSecond - startSecond
End If
'//////////////////////////////
EndMinute = (60 / 100) * xMinute 'подщитаем сколько денег в одной минуте, и умножим на количество минут :)
'короче до секунды я думаю выщитывать не будем.
'такая точность не к чему.
'выравниваем по формату ##:##:##, чтобы было красиво :)
If Int(xHour) < 10 Then xHour = "0" & xHour: MsgBox xHour
If Int(xMinute) < 10 Then xMinute = "0" & xMinute
If Int(xSecond) < 10 Then xSecond = "0" & xSecond
EndTime = xHour & ":" & xMinute & ":" & xSecond
d = (xHour * 100) + EndMinute 'сумма в зеленых :)))
MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & d & "$"
End Sub
Private EndTime As String 'время окончания работы
Sub St() 'вызиваеться по началу работы
StartTime = Time
End Sub
Sub En() 'вызиваеться по окончанию работы
Dim Tm As String
Tm = Time
Dim xHour As String
Dim xMinute As String
Dim xSecond As String
Dim EndMinute As Double
endHour = Mid(Tm, 1, 1) & Mid(Tm, 2, 1)
EndMinute = Mid(Tm, 4, 1) & Mid(Tm, 5, 1)
endSecond = Mid(Tm, 7, 1) & Mid(Tm, 8, 1)
startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
startMinute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
startSecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)
'/// Ето самая важная часть ///
If EndMinute < startMinute Then 'сколько часав трудился
xHour = startHour
Else
xHour = endHour - startHour
End If
If EndMinute < startMinute Then 'сколько минут
xMinute = startMinute
Else
xMinute = EndMinute - startMinute
End If
If endSecond < startSecond Then 'сколько секунд (по-приколу)
xSecond = startSecond
Else
xSecond = endSecond - startSecond
End If
'//////////////////////////////
EndMinute = (60 / 100) * xMinute 'подщитаем сколько денег в одной минуте, и умножим на количество минут :)
'короче до секунды я думаю выщитывать не будем.
'такая точность не к чему.
'выравниваем по формату ##:##:##, чтобы было красиво :)
If Int(xHour) < 10 Then xHour = "0" & xHour: MsgBox xHour
If Int(xMinute) < 10 Then xMinute = "0" & xMinute
If Int(xSecond) < 10 Then xSecond = "0" & xSecond
EndTime = xHour & ":" & xMinute & ":" & xSecond
d = (xHour * 100) + EndMinute 'сумма в зеленых :)))
MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & d & "$"
End Sub
все зааботало и весьма красиво )
Спасибо еще раз .. :p
написанный тобою код актуален для времени в промежутке от 10 часов до 24.
если например , время 8:45 ,то переменная endHour принимает значение 8:, ну и минуты и секунды также... ну и далее естественно операции с ними не выполняюцца...
Как сделать его универсальным ?
В делфе конечно можно было бы try-преобразовать в Int-except-выделить из строки по другому... А как в ВБ ?
[FONT="Courier New"]Если длина <> 7 (00:00:00) Значит
' --- код обработки ---
Иначе (0:00:00)
' --- код обработки ---
Конец Оператора[/FONT]
Ведь все в наших руках!
Код:
Private StartTime As String 'время начала работы
Private EndTime As String 'время окончания работы
Sub Начало_Работы() 'вызиваеться по началу работы
StartTime = "8:45:00"
End Sub
Sub Окончане_Работы() 'вызиваеться по окончанию работы
Dim Tm As String
Tm = Time
Dim xHour As String
Dim xMinute As String
Dim xSecond As String
Dim endMinute As Double
If Len(Tm) <> 7 Then
endhour = Mid(Tm, 1, 1) & Mid(Tm, 2, 1)
endMinute = Mid(Tm, 4, 1) & Mid(Tm, 5, 1)
endsecond = Mid(Tm, 7, 1) & Mid(Tm, 8, 1)
Else
endhour = Mid(Tm, 1, 1)
endMinute = Mid(Tm, 3, 1) & Mid(Tm, 4, 1)
endsecond = Mid(Tm, 6, 1) & Mid(Tm, 7, 1)
End If
If Len(StartTime) <> 7 Then
startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
startminute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
startsecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)
Else
startHour = Mid(StartTime, 1, 1)
startminute = Mid(StartTime, 3, 1) & Mid(StartTime, 4, 1)
startsecond = Mid(StartTime, 6, 1) & Mid(StartTime, 7, 1)
End If
'msg = "start hour: " & startHour & " --- end hour: " & endhour & vbNewLine & _
'"start minute: " & startminute & " --- end minute: " & endMinute & vbNewLine & _
'"start second: " & startsecond & " --- end second: " & endsecond
'MsgBox msg
'/// Ето самая важная часть ///
If Int(endhour) < Int(startHour) Then 'сколько часав трудился
xHour = startHour
Else
xHour = endhour - startHour
End If
If Int(endMinute) < Int(startminute) Then 'сколько минут
xMinute = startminute
Else
xMinute = endMinute - startminute
End If
If Int(endsecond) < Int(startsecond) Then 'сколько секунд (по-приколу)
xSecond = startsecond
Else
xSecond = endsecond - startsecond
End If
'//////////////////////////////
endMinute = ((60 / 100) * xMinute) * 2.8 'подщитаем сколько денег в одной минуте, и умножим на количество минут :)
'короче до секунды я думаю выщитывать не будем.
'такая точность не к чему.
'выравниваем по формату ##:##:##, чтобы было красиво :)
If Int(xHour) < 10 And Len(xHour) < 2 Then xHour = "0" & xHour
If Int(xMinute) < 10 Then xMinute = "0" & xMinute
If Int(xSecond) < 10 Then xSecond = "0" & xSecond
EndTime = xHour & ":" & xMinute & ":" & xSecond
d = (xHour * 100) + endMinute 'сумма в зеленых :)))
MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & d & "$"
End Sub
Private EndTime As String 'время окончания работы
Sub Начало_Работы() 'вызиваеться по началу работы
StartTime = "8:45:00"
End Sub
Sub Окончане_Работы() 'вызиваеться по окончанию работы
Dim Tm As String
Tm = Time
Dim xHour As String
Dim xMinute As String
Dim xSecond As String
Dim endMinute As Double
If Len(Tm) <> 7 Then
endhour = Mid(Tm, 1, 1) & Mid(Tm, 2, 1)
endMinute = Mid(Tm, 4, 1) & Mid(Tm, 5, 1)
endsecond = Mid(Tm, 7, 1) & Mid(Tm, 8, 1)
Else
endhour = Mid(Tm, 1, 1)
endMinute = Mid(Tm, 3, 1) & Mid(Tm, 4, 1)
endsecond = Mid(Tm, 6, 1) & Mid(Tm, 7, 1)
End If
If Len(StartTime) <> 7 Then
startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
startminute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
startsecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)
Else
startHour = Mid(StartTime, 1, 1)
startminute = Mid(StartTime, 3, 1) & Mid(StartTime, 4, 1)
startsecond = Mid(StartTime, 6, 1) & Mid(StartTime, 7, 1)
End If
'msg = "start hour: " & startHour & " --- end hour: " & endhour & vbNewLine & _
'"start minute: " & startminute & " --- end minute: " & endMinute & vbNewLine & _
'"start second: " & startsecond & " --- end second: " & endsecond
'MsgBox msg
'/// Ето самая важная часть ///
If Int(endhour) < Int(startHour) Then 'сколько часав трудился
xHour = startHour
Else
xHour = endhour - startHour
End If
If Int(endMinute) < Int(startminute) Then 'сколько минут
xMinute = startminute
Else
xMinute = endMinute - startminute
End If
If Int(endsecond) < Int(startsecond) Then 'сколько секунд (по-приколу)
xSecond = startsecond
Else
xSecond = endsecond - startsecond
End If
'//////////////////////////////
endMinute = ((60 / 100) * xMinute) * 2.8 'подщитаем сколько денег в одной минуте, и умножим на количество минут :)
'короче до секунды я думаю выщитывать не будем.
'такая точность не к чему.
'выравниваем по формату ##:##:##, чтобы было красиво :)
If Int(xHour) < 10 And Len(xHour) < 2 Then xHour = "0" & xHour
If Int(xMinute) < 10 Then xMinute = "0" & xMinute
If Int(xSecond) < 10 Then xSecond = "0" & xSecond
EndTime = xHour & ":" & xMinute & ":" & xSecond
d = (xHour * 100) + endMinute 'сумма в зеленых :)))
MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & d & "$"
End Sub
Большое, спасибо... Все заработало ...
вместо функции int(которая округляет до ближайшего целого в меньшую сторону), использовать val.
А если чек на ночь снял комп, например с 22 до 08?
мне кажется проще не время считать а таймер.
starttime=timer
endtime=timer
sittime=endtime-starttime 'в секундах