
Cálculo Data / Hora
#1
Posted 07/12/2004, 16:29
Estou precisando fazer um sistema de cálculo de datas e horas (calculo de tempo de atendimento de um chamado), esse sistema vai funcionar da seguinte forma:
Expedientes...
Segunda-Feira - 08:00:00 / 17:30:00
Terça-Feira - 08:00:00 / 17:30:00
Quarta-Feira - 08:00:00 / 17:30:00
Quinta-Feira - 08:00:00 / 17:30:00
Sexta-Feira - 08:00:00 / 15:30:00
Vamos supor que abro um chamado na terça-feira às 14:30:00, esse chamado é encerrado na quinta-feira às 09:00:00. Preciso calcular o tempo que há entre essas duas datas/horas, mas há um porém que dificulta minha vida aqui... O cronometro deve rodar até atingir o final do expediente, por exemplo: Na terça contabilizo as horas das 14:30:00 até 17:30:00 e paro o cronometro, na quarta volto andar o cronometro à partir das 08:00:00 e paro novamente às 17:30:00 e assim por diante. Quero contabilizar apenas os horários que realmente são trabalhados...
Tem como desenvolver algo para resolver meu problema?
Detalhe: A data/hora inicial e a data/hora final à ser calculada já está armazenada e disponível.
Obrigado!
#2
Posted 07/12/2004, 21:40
Bom dia,
Estou precisando fazer um sistema de cálculo de datas e horas (calculo de tempo de atendimento de um chamado), esse sistema vai funcionar da seguinte forma:
Expedientes...
Segunda-Feira - 08:00:00 / 17:30:00
Terça-Feira - 08:00:00 / 17:30:00
Quarta-Feira - 08:00:00 / 17:30:00
Quinta-Feira - 08:00:00 / 17:30:00
Sexta-Feira - 08:00:00 / 15:30:00
Vamos supor que abro um chamado na terça-feira às 14:30:00, esse chamado é encerrado na quinta-feira às 09:00:00. Preciso calcular o tempo que há entre essas duas datas/horas, mas há um porém que dificulta minha vida aqui... O cronometro deve rodar até atingir o final do expediente, por exemplo: Na terça contabilizo as horas das 14:30:00 até 17:30:00 e paro o cronometro, na quarta volto andar o cronometro à partir das 08:00:00 e paro novamente às 17:30:00 e assim por diante. Quero contabilizar apenas os horários que realmente são trabalhados...
Tem como desenvolver algo para resolver meu problema?
Detalhe: A data/hora inicial e a data/hora final à ser calculada já está armazenada e disponível.
Obrigado!
Eu vo faze uma function.. mas soh há horas para esses dias da semana?
Edição feita por: hdz*, 07/12/2004, 21:48.
#3
Posted 08/12/2004, 01:43
http://forum.wmonlin...showtopic=84626
http://forum.wmonlin...showtopic=98815
---------------------------------------------------------------------------
> BRdesign.NET - Soluções em Websites e Sistemas E-Commerce.
---------------------------------------------------------------------------
> BR-ecommerce - Sua loja virtual na internet! - Apenas R$99,90 mensais (hospedagem inclusa)!
#4
Posted 08/12/2004, 23:32
Sim inicialmente somente esses períodos mencionados!!!Bom dia,
Estou precisando fazer um sistema de cálculo de datas e horas (calculo de tempo de atendimento de um chamado), esse sistema vai funcionar da seguinte forma:
Expedientes...
Segunda-Feira - 08:00:00 / 17:30:00
Terça-Feira - 08:00:00 / 17:30:00
Quarta-Feira - 08:00:00 / 17:30:00
Quinta-Feira - 08:00:00 / 17:30:00
Sexta-Feira - 08:00:00 / 15:30:00
Vamos supor que abro um chamado na terça-feira às 14:30:00, esse chamado é encerrado na quinta-feira às 09:00:00. Preciso calcular o tempo que há entre essas duas datas/horas, mas há um porém que dificulta minha vida aqui... O cronometro deve rodar até atingir o final do expediente, por exemplo: Na terça contabilizo as horas das 14:30:00 até 17:30:00 e paro o cronometro, na quarta volto andar o cronometro à partir das 08:00:00 e paro novamente às 17:30:00 e assim por diante. Quero contabilizar apenas os horários que realmente são trabalhados...
Tem como desenvolver algo para resolver meu problema?
Detalhe: A data/hora inicial e a data/hora final à ser calculada já está armazenada e disponível.
Obrigado!
Eu vo faze uma function.. mas soh há horas para esses dias da semana?
Posteriormente entrará o s´bado também, mas ai é questão de adaptação apenas...
Se puder me ajudar, agradeço e muito!
#5
Posted 09/12/2004, 19:49
Ta aí.. ve se é isso que vc ker.. na array vc ajusta a hora incial/final dos dias da semana. Se vc kiser usar o sabado como vc citou que poderia usar posteriormente trabalhe da seguinte forma... redimensione a array de (5,2) para (6,2) e retire os apostrofes das linhas:Sim inicialmente somente esses períodos mencionados!!!
Bom dia,
Estou precisando fazer um sistema de cálculo de datas e horas (calculo de tempo de atendimento de um chamado), esse sistema vai funcionar da seguinte forma:
Expedientes...
Segunda-Feira - 08:00:00 / 17:30:00
Terça-Feira - 08:00:00 / 17:30:00
Quarta-Feira - 08:00:00 / 17:30:00
Quinta-Feira - 08:00:00 / 17:30:00
Sexta-Feira - 08:00:00 / 15:30:00
Vamos supor que abro um chamado na terça-feira às 14:30:00, esse chamado é encerrado na quinta-feira às 09:00:00. Preciso calcular o tempo que há entre essas duas datas/horas, mas há um porém que dificulta minha vida aqui... O cronometro deve rodar até atingir o final do expediente, por exemplo: Na terça contabilizo as horas das 14:30:00 até 17:30:00 e paro o cronometro, na quarta volto andar o cronometro à partir das 08:00:00 e paro novamente às 17:30:00 e assim por diante. Quero contabilizar apenas os horários que realmente são trabalhados...
Tem como desenvolver algo para resolver meu problema?
Detalhe: A data/hora inicial e a data/hora final à ser calculada já está armazenada e disponível.
Obrigado!
Eu vo faze uma function.. mas soh há horas para esses dias da semana?
Posteriormente entrará o s´bado também, mas ai é questão de adaptação apenas...
Se puder me ajudar, agradeço e muito!
arrDias(5,0) = "08:00:00": arrDias(5,1) = "17:30:00" 'Sabado
Case 2, 3, 4, 5, 6, 7
------ Function --------
<% Function FormatDateTime(DateTime) If InStr(1, DateTime, "/") > 0 Then sDta = DateTime If Mid(sDta, 2, 1) = "/" Then sDta = "0" & sDta If Mid(sDta, 5, 1) = "/" Then sDta = Left(sDta, 3) & "0" & Right(sDta, 6) FormatDateTime = sDta Else sTime = DateTime If Mid(sTime, 2, 1) = ":" Then sTime = "0" & sTime If Mid(sTime, 5, 1) = ":" Then sTime = Left(sTime, 3) & "0" & Right(sTime, Len(sTime) - 3) If Mid(sTime, Len(sTime) - 1, 1) = ":" Then sTime = Left(sTime, Len(sTime) - 1) & "0" & Right(sTime, 1) FormatDateTime = sTime End If End Function Function CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) Dim arrDias(5,2) arrDias(0,0) = "08:00:00": arrDias(0,1) = "17:30:00" 'Segunda arrDias(1,0) = "08:00:00": arrDias(1,1) = "17:30:00" 'Terça arrDias(2,0) = "08:00:00": arrDias(2,1) = "17:30:00" 'Quarta arrDias(3,0) = "08:00:00": arrDias(3,1) = "17:30:00" 'Quinta arrDias(4,0) = "08:00:00": arrDias(4,1) = "17:30:00" 'Sexta 'arrDias(5,0) = "08:00:00": arrDias(5,1) = "17:30:00" 'Sabado iD = Day(DataInicial) iM = Month(DataInicial) iA = Year(DataInicial) Do Until DataTmp = DataFinal DiaIni = iD MesIni = iM AnoIni = iA DataTmp = FormatDateTime(DiaIni & "/" & MesIni & "/" & AnoIni) If IsDate(DataTmp) Then Select Case WeekDay(DataTmp) Case 2, 3, 4, 5, 6 ', 7 sDias = sDias & DataTmp & "*" End Select End If iD = iD + 1 If iD = 32 Then iM = iM + 1 iD = 1 If iM = 13 Then iA = iA + 1 iM = 1 iD = 1 End If End If Loop If sDias <> "" Then If InStr(1, sDias, "*") > 0 Then sDias = Left(sDias, Len(sDias) - 1) If InStr(1, sDias, "*") > 0 Then Dias = Split(sDias, "*") For i = LBound(Dias) To UBound(Dias) If i = LBound(Dias) Then If HoraInicial > arrDias(WeekDay(Dias(i)) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(WeekDay(Dias(i)) - 2, 0) End If Else HoraIniTmp = arrDias(WeekDay(Dias(i)) - 2, 0) End If If i = UBound(Dias) Then If HoraFinal < arrDias(WeekDay(Dias(i)) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(WeekDay(Dias(i)) - 2, 1) End If Else HoraFimTmp = arrDias(WeekDay(Dias(i)) - 2, 1) End If SecDif = SecDif + DateDiff("s", HoraIniTmp, HoraFimTmp) Next Else SecDif = DateDiff("s", HoraInicial, HoraFinal) End If End If Else CalculaHoras = -1 Exit Function End If MinDif = SecDif \ 60 SecDif = SecDif Mod 60 HourDif = MinDif \ 60 MinDif = MinDif Mod 60 CalculaHoras = FormatDateTime(HourDif & ":" & MinDif & ":" & SecDif) End Function %>
Para usar a função.. informe:
String = CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal)
Respeitando o formato dd/mm/yyyy para data e hh:mm:ss para hora.
Eu num testei todas as condições possiveis entaum qq erro informa ai a linha q a gente da um jeito.
Bom teste ae..

Edição feita por: hdz*, 10/12/2004, 07:23.
#6
Posted 10/12/2004, 11:10
Não sei o que está ocorrendo, mas o resultado não esta retornando corretamente na tela, veja logo no final do seu código, como eu inicializei as variáveis!
O resultado que esta retornando é:
367:30:00
<% Function FormatDateTime(DateTime) If InStr(1, DateTime, "/") > 0 Then sDta = DateTime If Mid(sDta, 2, 1) = "/" Then sDta = "0" & sDta If Mid(sDta, 5, 1) = "/" Then sDta = Left(sDta, 3) & "0" & Right(sDta, 6) FormatDateTime = sDta Else sTime = DateTime If Mid(sTime, 2, 1) = ":" Then sTime = "0" & sTime If Mid(sTime, 5, 1) = ":" Then sTime = Left(sTime, 3) & "0" & Right(sTime, Len(sTime) - 3) If Mid(sTime, Len(sTime) - 1, 1) = ":" Then sTime = Left(sTime, Len(sTime) - 1) & "0" & Right(sTime, 1) FormatDateTime = sTime End If End Function Function CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) Dim arrDias(5,2) arrDias(0,0) = "08:00:00": arrDias(0,1) = "17:30:00" 'Segunda arrDias(1,0) = "08:00:00": arrDias(1,1) = "17:30:00" 'Terça arrDias(2,0) = "08:00:00": arrDias(2,1) = "17:30:00" 'Quarta arrDias(3,0) = "08:00:00": arrDias(3,1) = "17:30:00" 'Quinta arrDias(4,0) = "08:00:00": arrDias(4,1) = "15:30:00" 'Sexta 'arrDias(5,0) = "08:00:00": arrDias(5,1) = "17:30:00" 'Sabado iD = Day(DataInicial) iM = Month(DataInicial) iA = Year(DataInicial) Do Until DataTmp = DataFinal DiaIni = iD MesIni = iM AnoIni = iA DataTmp = FormatDateTime(DiaIni & "/" & MesIni & "/" & AnoIni) If IsDate(DataTmp) Then Select Case WeekDay(DataTmp) Case 2, 3, 4, 5, 6 ', 7 sDias = sDias & DataTmp & "*" End Select End If iD = iD + 1 If iD = 32 Then iM = iM + 1 iD = 1 If iM = 13 Then iA = iA + 1 iM = 1 iD = 1 End If End If Loop If sDias <> "" Then If InStr(1, sDias, "*") > 0 Then sDias = Left(sDias, Len(sDias) - 1) If InStr(1, sDias, "*") > 0 Then Dias = Split(sDias, "*") For i = LBound(Dias) To UBound(Dias) If i = LBound(Dias) Then If HoraInicial > arrDias(WeekDay(Dias(i)) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(WeekDay(Dias(i)) - 2, 0) End If Else HoraIniTmp = arrDias(WeekDay(Dias(i)) - 2, 0) End If If i = UBound(Dias) Then If HoraFinal < arrDias(WeekDay(Dias(i)) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(WeekDay(Dias(i)) - 2, 1) End If Else HoraFimTmp = arrDias(WeekDay(Dias(i)) - 2, 1) End If SecDif = SecDif + DateDiff("s", HoraIniTmp, HoraFimTmp) Next Else SecDif = DateDiff("s", HoraInicial, HoraFinal) End If End If Else CalculaHoras = -1 Exit Function End If MinDif = SecDif \ 60 SecDif = SecDif Mod 60 HourDif = MinDif \ 60 MinDif = MinDif Mod 60 If Len(SecDif) = 1 Then SecDif = "0" & SecDif If Len(MinDif) = 1 Then MinDif = "0" & MinDif If Len(HourDif) = 1 Then HourDif = "0" & HourDif CalculaHoras = HourDif & ":" & MinDif & ":" & SecDif End Function %> <% dim string DataInicial = "10/12/2004" HoraInicial = "08:00:00" DataFinal = "10/12/2004" HoraFinal = "15:30:00" String = CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) response.write String %>
#7
Posted 10/12/2004, 11:56
hmm vc tem certeza disso ? aqui está retornando 07:30:00.. testa ae..:Hdz,
Não sei o que está ocorrendo, mas o resultado não esta retornando corretamente na tela, veja logo no final do seu código, como eu inicializei as variáveis!
O resultado que esta retornando é:
367:30:00<% Function FormatDateTime(DateTime) If InStr(1, DateTime, "/") > 0 Then sDta = DateTime If Mid(sDta, 2, 1) = "/" Then sDta = "0" & sDta If Mid(sDta, 5, 1) = "/" Then sDta = Left(sDta, 3) & "0" & Right(sDta, 6) FormatDateTime = sDta Else sTime = DateTime If Mid(sTime, 2, 1) = ":" Then sTime = "0" & sTime If Mid(sTime, 5, 1) = ":" Then sTime = Left(sTime, 3) & "0" & Right(sTime, Len(sTime) - 3) If Mid(sTime, Len(sTime) - 1, 1) = ":" Then sTime = Left(sTime, Len(sTime) - 1) & "0" & Right(sTime, 1) FormatDateTime = sTime End If End Function Function CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) Dim arrDias(5,2) arrDias(0,0) = "08:00:00": arrDias(0,1) = "17:30:00" 'Segunda arrDias(1,0) = "08:00:00": arrDias(1,1) = "17:30:00" 'Terça arrDias(2,0) = "08:00:00": arrDias(2,1) = "17:30:00" 'Quarta arrDias(3,0) = "08:00:00": arrDias(3,1) = "17:30:00" 'Quinta arrDias(4,0) = "08:00:00": arrDias(4,1) = "15:30:00" 'Sexta 'arrDias(5,0) = "08:00:00": arrDias(5,1) = "17:30:00" 'Sabado iD = Day(DataInicial) iM = Month(DataInicial) iA = Year(DataInicial) Do Until DataTmp = DataFinal DiaIni = iD MesIni = iM AnoIni = iA DataTmp = FormatDateTime(DiaIni & "/" & MesIni & "/" & AnoIni) If IsDate(DataTmp) Then Select Case WeekDay(DataTmp) Case 2, 3, 4, 5, 6 ', 7 sDias = sDias & DataTmp & "*" End Select End If iD = iD + 1 If iD = 32 Then iM = iM + 1 iD = 1 If iM = 13 Then iA = iA + 1 iM = 1 iD = 1 End If End If Loop If sDias <> "" Then If InStr(1, sDias, "*") > 0 Then sDias = Left(sDias, Len(sDias) - 1) If InStr(1, sDias, "*") > 0 Then Dias = Split(sDias, "*") For i = LBound(Dias) To UBound(Dias) If i = LBound(Dias) Then If HoraInicial > arrDias(WeekDay(Dias(i)) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(WeekDay(Dias(i)) - 2, 0) End If Else HoraIniTmp = arrDias(WeekDay(Dias(i)) - 2, 0) End If If i = UBound(Dias) Then If HoraFinal < arrDias(WeekDay(Dias(i)) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(WeekDay(Dias(i)) - 2, 1) End If Else HoraFimTmp = arrDias(WeekDay(Dias(i)) - 2, 1) End If SecDif = SecDif + DateDiff("s", HoraIniTmp, HoraFimTmp) Next Else SecDif = DateDiff("s", HoraInicial, HoraFinal) End If End If Else CalculaHoras = -1 Exit Function End If MinDif = SecDif \ 60 SecDif = SecDif Mod 60 HourDif = MinDif \ 60 MinDif = MinDif Mod 60 If Len(SecDif) = 1 Then SecDif = "0" & SecDif If Len(MinDif) = 1 Then MinDif = "0" & MinDif If Len(HourDif) = 1 Then HourDif = "0" & HourDif CalculaHoras = HourDif & ":" & MinDif & ":" & SecDif End Function %> <% dim string DataInicial = "10/12/2004" HoraInicial = "08:00:00" DataFinal = "10/12/2004" HoraFinal = "15:30:00" String = CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) response.write String %>
response.write CalculaHoras("10/12/2004", "08:00:00", "10/12/2004", "15:30:00")
Alias.. alguem ai pode testar fazendo favor e ver se tá retornando a diferença certa de horas plz.. thankz

Edição feita por: hdz*, 10/12/2004, 20:14.
#8
Posted 11/12/2004, 00:36
Function FormatDateTime(DateTime) 'Autor: Felipe C. Mosca <fmosca@ajato.com.br> 'Function: FormatDateTime() 'Descrição: Formata hora e data para o formato [dd/mm/yyyy] e [hh:mm:ss] If InStr(1, DateTime, "/") > 0 Then sDta = DateTime If Mid(sDta, 2, 1) = "/" Then sDta = "0" & sDta If Mid(sDta, 5, 1) = "/" Then sDta = Left(sDta, 3) & "0" & Right(sDta, 6) FormatDateTime = sDta Else sTime = DateTime If Mid(sTime, 2, 1) = ":" Then sTime = "0" & sTime If Mid(sTime, 5, 1) = ":" Then sTime = Left(sTime, 3) & "0" & Right(sTime, Len(sTime) - 3) If Mid(sTime, Len(sTime) - 1, 1) = ":" Then sTime = Left(sTime, Len(sTime) - 1) & "0" & Right(sTime, 1) FormatDateTime = sTime End If End Function Function CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) 'Autor: Felipe C. Mosca <fmosca@ajato.com.br> 'Function: CalculaHoras() 'Descrição: Calcula as horas durante um período de datas Dim arrDias(5, 2) arrDias(0, 0) = "08:00:00": arrDias(0, 1) = "17:30:00" 'Segunda arrDias(1, 0) = "08:00:00": arrDias(1, 1) = "17:30:00" 'Terça arrDias(2, 0) = "08:00:00": arrDias(2, 1) = "17:30:00" 'Quarta arrDias(3, 0) = "08:00:00": arrDias(3, 1) = "17:30:00" 'Quinta arrDias(4, 0) = "08:00:00": arrDias(4, 1) = "15:30:00" 'Sexta 'arrDias(5,0) = "08:00:00": arrDias(5,1) = "17:30:00" 'Sabado iD = Day(DataInicial) iM = Month(DataInicial) iA = Year(DataInicial) Do Until DataTmp = DataFinal DiaIni = iD MesIni = iM AnoIni = iA DataTmp = FormatDateTime(DiaIni & "/" & MesIni & "/" & AnoIni) If IsDate(DataTmp) Then Select Case Weekday(DataTmp) Case 2, 3, 4, 5, 6 ', 7 sDias = sDias & DataTmp & "*" End Select End If iD = iD + 1 If iD = 32 Then iM = iM + 1 iD = 1 If iM = 13 Then iA = iA + 1 iM = 1 iD = 1 End If End If Loop If sDias <> "" Then If InStr(1, sDias, "*") > 0 Then sDias = Left(sDias, Len(sDias) - 1) If InStr(1, sDias, "*") > 0 Then Dias = Split(sDias, "*") For i = LBound(Dias) To UBound(Dias) If i = LBound(Dias) Then If HoraInicial > arrDias(Weekday(Dias(i)) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(Weekday(Dias(i)) - 2, 0) End If Else HoraIniTmp = arrDias(Weekday(Dias(i)) - 2, 0) End If If i = UBound(Dias) Then If HoraFinal < arrDias(Weekday(Dias(i)) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(Weekday(Dias(i)) - 2, 1) End If Else HoraFimTmp = arrDias(Weekday(Dias(i)) - 2, 1) End If SecDif = SecDif + DateDiff("s", HoraIniTmp, HoraFimTmp) Next Else If HoraInicial > arrDias(Weekday(sDias) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(Weekday(sDias) - 2, 0) End If If HoraFinal < arrDias(Weekday(sDias) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(Weekday(sDias) - 2, 1) End If SecDif = DateDiff("s", HoraIniTmp, HoraFimTmp) End If End If Else CalculaHoras = -1 Exit Function End If MinDif = SecDif \ 60 SecDif = SecDif Mod 60 HourDif = MinDif \ 60 MinDif = MinDif Mod 60 CalculaHoras = FormatDateTime(HourDif & ":" & MinDif & ":" & SecDif) End Function
Teste ae..tem q dar 16:30:
Response.Write CalculaHoras("10/12/2004", "08:30:00", "13/12/2004", "21:00:45")
#9
Posted 11/12/2004, 01:21
Function CalculaHoras(Tempo1, Tempo2) Dim DiaH(5,1) Sabado = False ' True para contar os Sábados e False para não contar DiaH(0,0) = "08:00:00": DiaH(0,1) = "17:30:00" 'Segunda DiaH(1,0) = "08:00:00": DiaH(1,1) = "17:30:00" 'Terça DiaH(2,0) = "08:00:00": DiaH(2,1) = "17:30:00" 'Quarta DiaH(3,0) = "08:00:00": DiaH(3,1) = "17:30:00" 'Quinta DiaH(4,0) = "08:00:00": DiaH(4,1) = "15:30:00" 'Sexta If Sabado Then DiaH(5,0) = "08:00:00": DiaH(5,1) = "17:30:00" 'Sábado End If Data1 = DateValue(Tempo1) Data2 = DateValue(Tempo2) DifDias = DateDiff("d",Data1,Data2) Soma = 0 For i = 0 To DifDias DataA = DateAdd("d",i,Data1) DiaS = WeekDay(DataA) If (DiaS = 7 And Not Sabado) Xor (DiaS <> 1) Then If DataA <> Data1 Then Hora1 = DiaH(DiaS-2,0) Else Hora1 = TimeValue(Tempo1) If DateDiff("n",Hora1,DiaH(DiaS-2,0)) > 0 Then Hora1 = DiaH(DiaS-2,0) End If If DataA <> Data2 Then Hora2 = DiaH(DiaS-2,1) Else Hora2 = TimeValue(Tempo2) If DateDiff("n",Hora2,DiaH(DiaS-2,1)) < 0 Then Hora2 = DiaH(DiaS-2,1) End If Soma = Soma + DateDiff("n",Hora1,Hora2) End If Next Hora = Soma \ 60 Minuto = Soma Mod 60 If Len(Hora) < 2 Then Hora = "0" & Hora If Len(Minuto) < 2 Then Minuto = "0" & Minuto CalculaHoras = Hora & ":" & Minuto End FunctionDeve ser chamada assim:
Response.Write CalculaHoras("10/12/2004 08:30", "13/12/2004 21:00")Ela só não chega a considerar os segundos, mas acho que não precisa tanto também...
#10
Posted 13/12/2004, 07:20
Bom dia HDZ,Corrigido mais uma veiz (versão 0.00001b) cheio de bugs provavelmente hehehe:
Function FormatDateTime(DateTime) 'Autor: Felipe C. Mosca <fmosca@ajato.com.br> 'Function: FormatDateTime() 'Descrição: Formata hora e data para o formato [dd/mm/yyyy] e [hh:mm:ss] If InStr(1, DateTime, "/") > 0 Then sDta = DateTime If Mid(sDta, 2, 1) = "/" Then sDta = "0" & sDta If Mid(sDta, 5, 1) = "/" Then sDta = Left(sDta, 3) & "0" & Right(sDta, 6) FormatDateTime = sDta Else sTime = DateTime If Mid(sTime, 2, 1) = ":" Then sTime = "0" & sTime If Mid(sTime, 5, 1) = ":" Then sTime = Left(sTime, 3) & "0" & Right(sTime, Len(sTime) - 3) If Mid(sTime, Len(sTime) - 1, 1) = ":" Then sTime = Left(sTime, Len(sTime) - 1) & "0" & Right(sTime, 1) FormatDateTime = sTime End If End Function Function CalculaHoras(DataInicial, HoraInicial, DataFinal, HoraFinal) 'Autor: Felipe C. Mosca <fmosca@ajato.com.br> 'Function: CalculaHoras() 'Descrição: Calcula as horas durante um período de datas Dim arrDias(5, 2) arrDias(0, 0) = "08:00:00": arrDias(0, 1) = "17:30:00" 'Segunda arrDias(1, 0) = "08:00:00": arrDias(1, 1) = "17:30:00" 'Terça arrDias(2, 0) = "08:00:00": arrDias(2, 1) = "17:30:00" 'Quarta arrDias(3, 0) = "08:00:00": arrDias(3, 1) = "17:30:00" 'Quinta arrDias(4, 0) = "08:00:00": arrDias(4, 1) = "15:30:00" 'Sexta 'arrDias(5,0) = "08:00:00": arrDias(5,1) = "17:30:00" 'Sabado iD = Day(DataInicial) iM = Month(DataInicial) iA = Year(DataInicial) Do Until DataTmp = DataFinal DiaIni = iD MesIni = iM AnoIni = iA DataTmp = FormatDateTime(DiaIni & "/" & MesIni & "/" & AnoIni) If IsDate(DataTmp) Then Select Case Weekday(DataTmp) Case 2, 3, 4, 5, 6 ', 7 sDias = sDias & DataTmp & "*" End Select End If iD = iD + 1 If iD = 32 Then iM = iM + 1 iD = 1 If iM = 13 Then iA = iA + 1 iM = 1 iD = 1 End If End If Loop If sDias <> "" Then If InStr(1, sDias, "*") > 0 Then sDias = Left(sDias, Len(sDias) - 1) If InStr(1, sDias, "*") > 0 Then Dias = Split(sDias, "*") For i = LBound(Dias) To UBound(Dias) If i = LBound(Dias) Then If HoraInicial > arrDias(Weekday(Dias(i)) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(Weekday(Dias(i)) - 2, 0) End If Else HoraIniTmp = arrDias(Weekday(Dias(i)) - 2, 0) End If If i = UBound(Dias) Then If HoraFinal < arrDias(Weekday(Dias(i)) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(Weekday(Dias(i)) - 2, 1) End If Else HoraFimTmp = arrDias(Weekday(Dias(i)) - 2, 1) End If SecDif = SecDif + DateDiff("s", HoraIniTmp, HoraFimTmp) Next Else If HoraInicial > arrDias(Weekday(sDias) - 2, 0) Then HoraIniTmp = HoraInicial Else HoraIniTmp = arrDias(Weekday(sDias) - 2, 0) End If If HoraFinal < arrDias(Weekday(sDias) - 2, 1) Then HoraFimTmp = HoraFinal Else HoraFimTmp = arrDias(Weekday(sDias) - 2, 1) End If SecDif = DateDiff("s", HoraIniTmp, HoraFimTmp) End If End If Else CalculaHoras = -1 Exit Function End If MinDif = SecDif \ 60 SecDif = SecDif Mod 60 HourDif = MinDif \ 60 MinDif = MinDif Mod 60 CalculaHoras = FormatDateTime(HourDif & ":" & MinDif & ":" & SecDif) End Function
Teste ae..tem q dar 16:30:Response.Write CalculaHoras("10/12/2004", "08:30:00", "13/12/2004", "21:00:45")
Chego a acreditar que é alguma distorção do meu servidor web aqui, pois novamente com o seu código (CTRL + C / CTRL + V) me retornou um horario não desejado = 390:0:00. Muito estranho.
Agora o que comprova que o problema é aqui, é que o resultado da função que o Leo fez também retorna um horario distorcido = 409:00.
Ambos resultados de acordo com os horarios que vocês escolheram ai no seus posts.
De qualquer forma valeu, ja ajudou e muito! (como aprendizado)
Vou ver com o pessoal de infra-estrutura WEB aqui para saber quais possíveis motivos...
Valeu!
Abraços,
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)