minutes - timediff php
mysql timediff a horas (10)
¡NOTA que la respuesta más votada en esta cadena es INCORRECTA! Usar HOUR solo devolverá horas como un entero. A continuación se corregiría la respuesta más popular a las horas de retorno como un número entero y los minutos como un decimal (es decir, 6,5 horas).
TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours
Estoy tratando de obtener el timediff de mi mesa y convertirlo a horas (es por un servicio facturado por hora)
SELECT TIME_TO_SEC (TIMEDIFF (endDate, startDate)) / 3600 FROM tareas>
donde endDate y startDate están en formato de fecha y hora
¿Hay alguna otra forma (más eficiente) para hacer esta tarea? Gracias !
Puede usar UNIX_TIMESTAMP para hacer el cálculo en la consulta SELECT.
SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff
FROM tasks
UNIX_TIMESTAMP convierte datetime a la cantidad de segundos de epoch. Puede restar ambas marcas de tiempo para obtener diferencia en segundo. Dividirlo con 3600 le dará la diferencia en hora.
eg: startDate 2010-01-31 00:00:00, endDate 2010-01-31 19:24:22
SELECT (UNIX_TIMESTAMP(dateFin)-UNIX_TIMESTAMP(dateDebut))/3600 hour_diff
FROM tasks
SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600
FROM tasks
devuelve 19.4061 que es bueno
SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different
FROM tasks
Solo devuelve horas mientras que también necesito minutos para convertir.
SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks
devuelve 0. Creo que el primero es el más eficiente. Gracias !!
para obtener Diffrence en Hour:
Hour(TIMEDIFF(date1,date2)) as Hour1
para obtener Diffrence en Minuto:
Minute(TIMEDIFF(date1,date2)) as Minute1
para obtener Diffrence en segundo lugar:
Second(TIMEDIFF(date1,date2)) as Second1
puedes usar mysql funcion timestampdiff como abajo
TIMESTAMPDIFF(HOUR, ''2018-06-01 00:00:00'', ''2018-06-01 12:00:00'')
TIMEDIFF(endDate, startDate)
en formato DateTime, de forma plana que a timestamp y dividen por (60 * 60)
SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks
Editar: Alternativamente, TimestampDiff también puede proporcionar una solución válida de una manera más elegante, proporcionando su ejemplo:
SELECT TIMESTAMPDIFF(MONTH,''2003-02-01'',''2003-05-01'');
Y tu solución puede ser:
SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different
FROM tasks
HOUR(TIMEDIFF(endDate, startDate))
podría funcionar, si estoy leyendo los documentos correctamente.
TIMEDIFF(endDate, startDate) / 10000
TIMESTAMPDIFF(HOUR, startDate, endDate)
es la mejor manera de hacerlo, porque funciona con grandes intervalos de tiempo, como
TIMESTAMPDIFF(HOUR, "2012-01-01 00:00:00", "2050-01-01 00:00:00")
Resultado: 333120
mientras
HOUR(TIMEDIFF("2050-01-01 00:00:00", "2012-01-01 00:00:00"))
Resultado: 838
falla
Como vemos en el ejemplo anterior, sorprendentemente incluso funciona más allá de la limitación de la marca de tiempo en el año 2038.
Las horas máximas devueltas por HOUR(TIMEDIFF(dateEnd, dateStart))
son 838, porque TIMEDIFF
está limitado al rango permitido para los valores TIME
.
select hour(timediff(''2017-01-01 00:00:00'', ''2017-01-01 00:01:00''));
return 1
select hour(timediff(''2017-01-01 00:01:00'', ''2017-01-01 00:00:00''));
return 1
select time_to_sec(timediff(''2017-01-01 00:00:00'', ''2017-01-01 00:00:05''));
return -5
select time_to_sec(timediff(''2017-01-01 00:00:00'', ''2017-01-01 00:00:05''))/60 as ''minutes'' ;
return -0.0833
si tiene los segundos puede convertirlo como quiera o qué y horas (...) no lo usaré cuando lo compare porque siempre es un valor positivo