Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alissong

[Resolvido] Diferença entre seis datas

Recommended Posts

Pessoal,

 

Estou tentando fazer essa diferença entre seis datas digitadas pelo usuário nos campos text.

Veja o código que estou tentando, mas não está funcionando:

Private Sub final_2_LostFocus()

Dim d1, d2, d3, d4, d5, d6 As Single

 

d1 = CDate(final_0.Text)

d2 = CDate(inicio_0.Text)

d3 = CDate(final_1.Text)

d4 = CDate(inicio_1.Text)

d5 = CDate(final_2.Text)

d6 = CDate(inicio_2.Text)

result0 = DateDiff("d", d1, d2)

result1 = DateDiff("d", d3, d4)

result2 = DateDiff("d", d5, d6)

n_dias.Text = Format((result0) + (result1) + (result2), "d")

 

End Sub

 

Um abraço.

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tendo o numero de dias é só usar da matematica :D,

Sabendo que 1 dia equivale a 24 horas, 1 hora equivale a 60 minutos e 1 minuto equivale a 60 segundo.

 

Horas = DIAS * 24

Minutos = DIAS * 24 * 60

Segundos = DIAS * 24 * 60 * 60

 

Mas dependendo, se o numero de dias for muito elevado vai dar OverFlow, vai ve por isso que você perguntou né.

Se você fizer do jeito que ta ali em baixo não vai dar certo(pelo menos aqui não deu), vai dar OverFlow.

tentei fazer:

 

x=1*24*60*60
'x as double

e deu overflow.

 

Depois tentei fazer

x=1*24
x=x*60
x=x*60
é a mesma coisa que a outra dali de cima e deu certo. Vai entender né.

 

Flw

 

qlqr coisa estamos aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah não Scorpio, o que quero não é transformar os dias em horas ou minutos ou segundos, e sim contar um intervalo de horas dentro de um mesmo dia

 

inicio: 18/02/2008 09:01:53

termino: 18/02/2008 10:00:53

 

tempo = termino = inicio = 59 min

 

Da mesma forma que existe o datediff, queria algo do tipo TimeDiff, hehehe...

 

Valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio Neto.

 

Tenho essa função basta melhorá-la:

Function HORASTRABALHADAS(sHoraIni As String, sHoraFin As String)

lTEMPO = DateDiff("n", sHoraIni, sHoraFin)

iHORA = 0

cMINUTO = 0

If lTEMPO > 0 Then

If lTEMPO > 60 Then

luTEMPO = lTEMPO

Do While luTEMPO >= 60

luTEMPO = (luTEMPO - 60)

iHORA = iHORA + 1

Loop

cMINUTO = (lTEMPO - (iHORA * 60))

Else

cMINUTO = lTEMPO

End If

MsgBox iHORA & ":" & Format(cMINUTO, "00") & "hs"

End If

End Function

 

'Chamanda da função

Call HORASTRABALHADAS("08:00", "16:35")

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alissong, funcionou direitinho, me parece que nem é preciso adaptar nada.

 

Agora só me explique uma coisa, ontem eu tinha tentado fazer o datediff usando horas, mas o retorno dava zero. Ai reparei que o seu não deu zero porque ao invés de "d" você usou "n".

 

O que quer dizer cada um e existem outras possibilidades?

 

Valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, o 'd' retorna os dias, o 'n' retorna os minutos e tem outros também

 

yyyy = Anos

m = Mês

y = Dias (mesma coisa que o d, se alguem souber a diferença, me fale :D)

d = Dias

w = Semanas

ww = Semanas (idem ao w, se alguem souber a diferença me fale tbm =/)

h = Hora

n = Minutos

s = Segundos

 

 

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Veja essa tabela que é muito útil para trabalhar com data e hora:

Parâmetro Intervalo Expressão Resultado

"yyyy" Year DateDiff("yyyy", "7/4/76", "7/4/86") 10

"q" Quarter DateDiff("q", "7/4/76", "7/4/86") 40

"m" Month DateDiff("m", "7/4/76", "7/4/86") 120

"y" Day of year DateDiff("y", "7/4/76", "7/4/86") 3652

"d" Day DateDiff("d", "7/4/76", "7/4/86") 3652

"w" Weekday DateDiff("w", "7/4/76", "7/4/86") 521

"ww" Week DateDiff("ww", "7/4/76", "7/4/86") 521

"h" Hour DateDiff("h", "7/4/76", "7/4/86") 87648

"n" Minute DateDiff("n", "7/4/76", "7/4/86") 5258880

"s" Second DateDiff("s", "7/4/76", "7/4/86") 315532800

Acho que vou precisar de ajuda suas, pois uso o vb06 com mysql ou postgresl, mas tenho que criar um banco de horas-extras e controle férias para menu chefe, porém estou querendo usar access 2000. O access é muito bom para isso ou não ? O banco é pequeno.

 

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio,

 

 

A diferença é isso:

 

ww (semana) , w (dia da semana)

Veja um exemplo tirado do site www.marcoratti.net

Function CalculaDiasUteis(dataInicio As Variant, dataFinal As Variant) As Integer

Dim intSemanas As Integer

Dim varDataCont As Variant

Dim intFimDias As Double

 

dataInicio = DateValue(dataInicio)

dataFinal = DateValue(dataFinal)

 

intSemanas = DateDiff("w", dataInicio, dataFinal)

varDataCont = DateAdd("ww", intSemanas, dataInicio)

 

intFimDias = 0

 

Do While varDataCont < dataFinal

 

'desconta os sábados e domingos

If Format(varDataCont, "ddd") <> "Sun" And Format(varDataCont, "ddd") <> "Sat" Then

intFimDias = intFimDias + 1

End If

varDataCont = DateAdd("d", 1, varDataCont)

Loop

 

CalculaDiasUteis = intSemanas * 5 + intFimDias

End Function

 

Um abraço.

 

 

Alissong

 

Pessoal,

 

Veja essa tabela que é muito útil para trabalhar com data e hora:

Parâmetro Intervalo Expressão Resultado

"yyyy" Year DateDiff("yyyy", "7/4/76", "7/4/86") 10

"q" Quarter DateDiff("q", "7/4/76", "7/4/86") 40

"m" Month DateDiff("m", "7/4/76", "7/4/86") 120

"y" Day of year DateDiff("y", "7/4/76", "7/4/86") 3652

"d" Day DateDiff("d", "7/4/76", "7/4/86") 3652

"w" Weekday DateDiff("w", "7/4/76", "7/4/86") 521

"ww" Week DateDiff("ww", "7/4/76", "7/4/86") 521

"h" Hour DateDiff("h", "7/4/76", "7/4/86") 87648

"n" Minute DateDiff("n", "7/4/76", "7/4/86") 5258880

"s" Second DateDiff("s", "7/4/76", "7/4/86") 315532800

Acho que vou precisar de ajuda suas, pois uso o vb06 com mysql ou postgresl, mas tenho que criar um banco de horas-extras e controle férias para menu chefe, porém estou querendo usar access 2000. O access é muito bom para isso ou não ? O banco é pequeno.

 

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela explicação :D

 

Se não me engano o VB6 trabalha com o Access 97, e não com o 2000.

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ele trabalha com 2000 sim, basta usar conexão dia DAO, e se conectar com Microsoft Jet 4.0 OLE DB Provider.

 

Se o banco é pequeno, você não encontrará grandes problemas não, pode usar.

 

Obrigado pela explicação, ajudou bastante, pode será muito útil.

 

E no que precisar para utilizar o acess pode contar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio Neto,

 

Estou construindo o banco de horas. Veja a estrutura da tabela:

Nome da tabela hora_extra

Campo tipo

cod_hora automeração automática

cod_matricula número

nome texto

entrada_p data/hora

saida_p data/hora

entrada_s data/hora

saida_s data/hora

hora data/hora

motivo texto

situacao texto

cadastro data/hora

Obs: Todos os campos está requerido = NAO

 

Veja o código teste que estou usando para gravar os dados:

Dim controle As Control

For Each controle In frmHora_Extra

If TypeOf controle Is TextBox Then

controle.Text = LimpaTexto(controle.Text)

End If

Next

 

 

If cod_matricula.Text = Empty Then

MsgBox "Digite o Nº Matrícula UFMG do servidor", vbExclamation, "Campo Obrigatório"

cod_matricula.SetFocus

Exit Sub

End If

If motivo.Text = Empty Then

MsgBox "Digite a data inical do período de férias", vbExclamation, "Campo Obrigatório"

motivo.SetFocus

Exit Sub

End If

 

Screen.MousePointer = vbHourglass

 

AdoHoraExtra("cod_matricula") = cod_matricula.Text

AdoHoraExtra("nome") = "" & nome.Text

AdoHoraExtra("entrada_p") = "" & entrada_p.Text

AdoHoraExtra("saida_p") = "" & saida_p.Text

AdoHoraExtra("entrada_s") = "" & entrada_s.Text

AdoHoraExtra("saida_s") = "" & saida_s.Text

AdoHoraExtra("hora") = "" & hora.Text

AdoHoraExtra("motivo") = "" & motivo.Text

AdoHoraExtra("situacao") = "" & situacao.Text

AdoHoraExtra("cadastro") = cadastro.Text

 

AdoHoraExtra.Update

AdoHoraExtra.Requery

 

mostradados

registro_hora

 

'Desabilita o botão cancelar

cmdCancelar.Enabled = False

'Desabilita o botão gravar

cmdGravar.Enabled = False

'Desabilita o botão excluir

cmdExcluir.Enabled = False

'Habilita o botão incluir

cmdIncluir.Enabled = True

 

cod_matricula.Locked = True

nome.Locked = True

entrada_p.Locked = True

saida_p.Locked = True

entrada_s.Locked = True

saida_s.Locked = True

motivo.Locked = True

situacao.Locked = True

 

MsgBox "Operação realizada com sucesso !", vbInformation, "Salvar Inclusão / Alteração"

 

Screen.MousePointer = vbDefault

frmHora_Extra.Refresh

 

Mas, todos os campos em branco exibe um erro de aspas. Vocês sabem que é o motivo.

 

 

Um abraço.

 

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria por que você ta concatenando "" com a data ? Não precisa converter ?

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio,

 

 

Depois de muito trabalho e tentativas. Ficou bom, mas veja o código completo:

Private Sub Text4_LostFocus()

Dim Datainicial

Dim Datafinal

Dim Datainicial_p

Dim Datafinal_p

 

 

If Text1.Text = "" Or Text2.Text = "" Or Text3.Text Or Text4.Text Then

MsgBox "Insira uma hora válida", vbExclamation, "Calcula hora"

Text1.SetFocus

 

Else

 

Datainicial = TimeValue(Text1)

Datafinal = TimeValue(Text2)

Datainicial_p = TimeValue(Text3)

Datafinal_p = TimeValue(Text4)

Strc = DateDiff("s", Datainicial, Datafinal)

Strp = DateDiff("s", Datainicial_p, Datafinal_p)

 

Horas = Int(Strc / 3600)

minutos = Int((Strc Mod 3600) / 60)

Horas_s = Int(Strp / 3600)

minutos_s = Int((Strp Mod 3600) / 60)

 

re1 = TimeValue((Horas & ":" & minutos))

re2 = TimeValue((Horas_s & ":" & minutos_s))

 

Text5.Text = re1 + re2

 

End If

End Sub

 

 

Obs: Na data seria assim:

AdoHoraExtra("entrada_p") = "" & cdate(entrada_p.Text)

 

Um abraço.

 

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou legal..

 

Mas no 'if' você poderia ter usado a função do VB isDate(), verifica a data/hora e retorna true/false.

 

 

Falou..

 

Qualquer coisa grita.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio,

 

 

Vou testar hoje em casa, e amanhã postarei o resultado, mas não entendi converter para data esses comandos:

AdoHoraExtra("entrada_p") = "" & entrada_p.Text

AdoHoraExtra("saida_p") = "" & saida_p.Text

AdoHoraExtra("entrada_s") = "" & entrada_s.Text

AdoHoraExtra("saida_s") = "" & saida_s.Text

AdoHoraExtra("hora") = "" & hora.Text

Cara, você é muito bom no vb e agradeço muito pela ajuda, mas se precisar de ajudar em postgres ou mysql. Estamos aí...

 

 

Um abraço.

 

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi mal. Não prestei atenção no seu ultimo post :P

 

Obs: Na data seria assim:

AdoHoraExtra("entrada_p") = "" & cdate(entrada_p.Text)

Sim seria assim.

 

Faz um teste tambem retirando o "" &

 

 

 

Não acho que sei muito sobre VB, falta muita pra eu saber muito hehe, só já passei por coisas que você não tinha passado então compartilho o que estou aprendendo, como o Claudio Neto que sempre vejo por aqui ajudando o pessoal e outros membros, assim como você ja passou por coisas que eu nem sonho em passar um dia.

 

 

FLw Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio,

 

Esse access é complicado. Por que o access não aceita esses comandos:

 

Private Sub CompSearchOk_Click()

On Error GoTo CompSearchOk ' Inicia o tratamento de erro

 

If AdoServidor.State = 1 Then Set AdoServidor = Nothing

sql = "select * from servidores where cod_matricula = '" & ListViewProcDespesa.SelectedItem & "%'"

AdoServidor.Open sql, accesscon, adOpenKeyset, adLockOptimistic

 

 

frmFerias.cod_matricula.Text = AdoServidor(0)

frmFerias.exercicio.SetFocus

 

Unload form_localiza_f

 

Form_CompSearchOk_exit:

Exit Sub

 

CompSearchOk:

MsgBox Err.Description, vbExclamation, "Erro em [CompSearchOk]"

 

End Sub

Exibe esse erro: Data Type mismatch in criteria expression.

 

Mas estou usando esse comando para gravar e deixo o campo situacao em branco.

Exibe esse erro: field'hora_extra.situacao' cannot be a zero-length string

Veja o comando:

 

 

AdoHoraExtra("cod_matricula") = Empty & cod_matricula.Text

AdoHoraExtra("nome") = Empty & nome.Text

AdoHoraExtra("entrada_p") = CDate(entrada_p.Text)

AdoHoraExtra("saida_p") = CDate(saida_p.Text)

AdoHoraExtra("entrada_s") = CDate(entrada_s.Text)

AdoHoraExtra("saida_s") = CDate(saida_s.Text)

AdoHoraExtra("hora") = CDate(hora.Text)

AdoHoraExtra("motivo") = Empty & motivo.Text

AdoHoraExtra("situacao") = Empty & situacao.Text

AdoHoraExtra("cadastro") = cadastro.Text

 

AdoHoraExtra.Update

AdoHoraExtra.Requery

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

sql = "select * from servidores where cod_matricula = '" & ListViewProcDespesa.SelectedItem & "%'"

cod_matricula é um campo numérico, e quando você vai fazer uma consulta, ou inserir dados via SQL, dados numericos (no caso a matricula) não devem ficar entre '

 

 

Mas estou usando esse comando para gravar e deixo o campo situacao em branco.

Exibe esse erro: field'hora_extra.situacao' cannot be a zero-length string

Veja o comando:

 

AdoHoraExtra("cod_matricula") = Empty & cod_matricula.Text

AdoHoraExtra("nome") = Empty & nome.Text

AdoHoraExtra("entrada_p") = CDate(entrada_p.Text)

AdoHoraExtra("saida_p") = CDate(saida_p.Text)

AdoHoraExtra("entrada_s") = CDate(entrada_s.Text)

AdoHoraExtra("saida_s") = CDate(saida_s.Text)

AdoHoraExtra("hora") = CDate(hora.Text)

AdoHoraExtra("motivo") = Empty & motivo.Text

AdoHoraExtra("situacao") = Empty & situacao.Text

AdoHoraExtra("cadastro") = cadastro.Text

 

AdoHoraExtra.Update

AdoHoraExtra.Requery

O erro fala que o campo não pode ter vazio, olhe na sua tabela pra ve se ele realmente pode receber vazio

 

 

Qualquer coisa grita :D.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.