Foros del Web » Programando para Internet » ASP Clásico »

suma de tiempos

Estas en el tema de suma de tiempos en el foro de ASP Clásico en Foros del Web. Hola, como podria sumar bastantes (mas o menos 200) tiempos que tengo almacenados en una base de datos access, horas:minutos:segundos __________________________ por ejemplo asi: 00:00:13 ...
  #1 (permalink)  
Antiguo 16/06/2003, 08:05
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
Exclamación suma de tiempos

Hola,

como podria sumar bastantes (mas o menos 200) tiempos que tengo almacenados en una base de datos access,

horas:minutos:segundos
__________________________
por ejemplo asi:

00:00:13
00:00:59
00:01:27
00:03:17
00:00:23

y que al final me diga el total de esa suma en tiempo.

por ejemplo el total en tiempo transcurrido es: 00:06:05
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 16/06/2003, 11:13
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 5 meses
Puntos: 4
Creas una variable inicial. Mediante un bucle vas sumando a la variable las consultas de la base de datos que hayas recogido en la sentencia SQL. Para sumarlas antes has de comvertirlas en un formato reconocible.
Por ejemplo, para las fechas está el CDate, que después de convertirlo utilizas DateAdd.
Supongo que habrá algo parecido para tiempo, no sé si CTime o algo así.

Suerte.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #3 (permalink)  
Antiguo 16/06/2003, 12:46
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
la verdad no entiendo muy bien como manipular fechas o tiempos, me pueden ilustrar un poco mas como hacerlo?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 16/06/2003, 14:24
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 5 meses
Puntos: 4
Bueno, estoy en ello, pero de momento te voy a ir dejando una introducción. Es muy probable que los ejemplos que te voy a poner no correspondan en absoluto con tu problema, pero así voy a ir dejando claro los pasos que doy y por qué.

Código:
<html>
<head>
<%
Dim ArrayTiempo,ArrayHora,ArrayMinuto,ArraySegundo,suma,Tiempo

dni = Request.Form("dni")

SET BASE = Server.CreateObject("ADODB.Connection")
BASE.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("./tiempos.mdb")
		
SQL = "SELECT * FROM Tiempos WHERE ID = '"& dni &"'"
SET RS = Server.CreateObject ("ADODB.RecordSet")
RS.Open SQL, BASE


IF NOT RS.EOF THEN
	RS.Movefirst
	DO UNTIL RS.EOF
	
	Tiempo=RS("Tiempos")

	ArrayTiempo = split(CDate(Tiempo),":")
	ArrayHora(RS("Posicion"))=ArrayTiempo(0)
	ArrayMinutos(RS("Posicion"))=ArrayTiempo(1)
	ArraySegundos(RS("Posicion"))=ArrayTiempo(2)

	RS.Movenext
	LOOP
END IF	

%>
</head>

<body>

</body>
</html>
Supongamos que quieres recoger los tiempos que ha hecho un usuario en un juego de carreras. Estos tiempos se han ido guardando en un base de datos (tiempos.mdb), en una tabla (Tiempos) que contiene 3 campos:

- "ID", donde se guarda la identificación del usuario que luego introducirá en un formulario para conocer sus tiempos.

- "Posicion", que guarda correlativamente el número de registros de ese usuario empezando por 0, que será lo que se use para ir definiendo las posiciones de la matriz de tiempos.

- "Tiempos", finalmente, los tiempos que ha hecho ese usuario en cada uno de los registros.

Pues bien, lo que hemos hecho es recoger del formulario previo, el identificador del usuario en la variable "dni" y tras crear la conexión a la base de datos buscamos los registros que coincidan con "dni" en el campo ID.

Mediante un bucle y puesto que los registros de tiempos están en la forma "HH:MM:SS" vamos guardando en tres matrices separadas las horas, los minutos y los segundos. Se ha utilizado el campo posición para ir numerando las posiciones de la matriz. Esto se podía haber ahorrado sumando 1 a una variable en cada vuelta del bucle, pero era por ahorrar código.

//a partir de aquí ya no está hecho pero no es muy difícil//

Pues bien, ahora lo que queda por hacer es símplemente sumar todos los elementos de cada matriz entre sí. No sé si con otro bucle o habrá una función específica que lo haga.

Una vez hecho esto, dividimos el resultado obtenido en la suma de la matriz de segundos entre 60 y el valor entero se lo añadimos al resultado de la suma de la matriz de minutos. Hacemos lo propio con el resultado que acabamos de obtener para sumárselo a las horas y ya tendríamos el total de los tiempos en tres variables:

TotalHoras:TotalMinutos:Totalsegundos

Bueno, después de todo este rollo que ni yo mismo me leería, decirte que todo esto no funciona.... ¡Qué no, que es broma!
En principio yo creo que se podría aproximar a esto, aunque seguro (y espero) que pronto aparezca algún monstruo de los que andan por aquí y lo resuleve todo en dos líneas.

Suerte.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 16/06/2003, 21:21
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
muchas gracias por la ayuda, pero la verdad quede mas enredado, alguien me puede ayudar, me imagino que habra algo mas simple para sumar las horas que tengo en todos mis campos de la base de datos, debe haber una funcion parecida como para sumar numeros en un select algo como:
SELECT SUM(tiempos) AS total_tiempos.
no se, espero alguien me pueda colaborar.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 17/06/2003, 11:02
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 5 meses
Puntos: 4
Bueno vale, reconozco que es bastante lioso, yo mismo estuve dalequetepego al tema un buen rato.
Ahora no estoy en casa, pero en cuanto pueda te completo el ejemplo pero más simplificado.

De momento, y no sé si se puede, por qué no pruebas a hacer directamente la suma con Access. Es decir, a modo de hoja de cálculo, sumas todos los registros en una celda y luego recuperas con ASP el valor de esa celda. No sé si te permitirá definir el tipo de datos del campo como HH:MM:SS para que te los sume correctamente. Es una opción, si no también está la posibilidad de exportar los datos a Excell.

Suerte y un saludo.

YA ESTÁ, AGGGGGGGGGGG
Por favor, dime que te vale porque si no me suicido :

Código:
<html>
<head>
<%
Dim vecHoras()
Dim vecMinutos()
Dim vecSegundos()

SET BASE = Server.CreateObject("ADODB.Connection")
BASE.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("./tiempos.mdb")
		
SQL = "SELECT * FROM Tiempos"
SET RS = Server.CreateObject ("ADODB.RecordSet")
RS.Open SQL, BASE

i=0

IF NOT RS.EOF THEN
	RS.Movefirst
	DO UNTIL RS.EOF
	
	Tiempo = RS("Tiempos")

	vecTiempo = split(CDate(Tiempo),":")
	IF i=0 THEN
		Redim vecHoras(i)
		Redim vecMinutos(i)
		Redim vecSegundos(i)
	ELSE 
		Redim Preserve vecHoras(i)
		Redim Preserve vecMinutos(i)
		Redim Preserve vecSegundos(i)
	END IF	
	
	vecHoras(i) = vecTiempo(0)
	vecMinutos(i) = vecTiempo(1)
	vecSegundos(i) = vecTiempo(2)

	i=i+1
	
	RS.Movenext
	LOOP
END IF	

%>
</head>

<body>
<table>
<%FOR i=0 TO UBound(vecHoras)%>
<tr>
<td>Ronda <%=i+1%>.-</td><td align="right"><%=vecHoras(i)%>h<%=vecMinutos(i)%>'<%=vecSegundos(i)%>''</td>
</tr>
<%NEXT%>

<tr><td colspan="2"><hr></td></tr>

<%
SumaSegundos = 0
SumaMinutos = 0
SumaHoras = 0

FOR i=0 TO UBound(vecHoras)
	SumaSegundos=SumaSegundos+vecSegundos(i)
	SumaMinutos=SumaMinutos+vecMinutos(i)
	SumaHoras=SumaHoras+vecHoras(i)
NEXT

masMinutos=Int(SumaSegundos/60)
SumaSegundos=SumaSegundos-(masMinutos*60)

SumaMinutos=SumaMinutos+masMinutos
masHoras=Int(SumaMinutos/60)
SumaMinutos=SumaMinutos-(masHoras*60)

SumaHoras=SumaHoras+masHoras

%>
<tr><td colspan="2" align="right"><b>TOTAL: <%=SumaHoras%>h<%=SumaMinutos%>'<%=SumaSegundos%>''</b></td></tr>
</table>
</body>
</html>
Te explico un poco. En al base de datos hay dos columnas, una de identificación del usuario y otra de los tiempos en formato HH:MM:SS. En este caso he guardado en el recordset todos los tiempos por lo que no sería necesario el primer campo del usuario. Si crees que si lo necesitas no hay más que modificar el SQL (fácil ¿no?).

Bien, pues se recoge en el vector vecTiempo los valores de las horas, minutos y segundos y se hacen corresponder con las entradas de los vectores vecHoras, vecMinutos y vecSegundos respectivamente. Esta parte es la que más me ha costado porque había que ir redimensionando esos vectores guardando los anteriores valores.

Una vez almacenados todos los datos y mostrados (opcional) se suman todos los valores de cada uno de los vectores. Después con cada suma se va hallando la parte entera de su división por 60 que será lo que se le añada al siguiente vector. Primero para segundos y lugo para los minutos.

Al final se muestra el valor total.

SÍ SÍ SÍ SÍ, JA JA JA JA. POR FÍN.

A mí me ha funcionado perfectamente así que espero que no te de problemas.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!

Última edición por Bravenap; 17/06/2003 a las 11:11
  #7 (permalink)  
Antiguo 19/06/2003, 18:29
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
muchas gracias por la ayuda y por el interes, lo probare y te aviso com me fue..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:44.