timestampdiff timediff minutes hours delete php mysql

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