MySQL timediff saate

7 Cevap php

Benim tablosundan timediff almak ve (bir saatlik faturalandırılan hizmet için var) saat dönüştürmek için çalışılıyor ediyorum

Görevler DAN TIME_TO_SEC (TIMEDIFF (endDate, startDate)) / 3600 SEÇİN>

endDate ve startDate datetime formatında nerede

is there another way (more efficient) to do this task? Thanks !

7 Cevap

DateTime formatında TIMEDIFF(endDate, startDate) çıkışlar, öylesine düz ki ile zaman damgası ve bölmek için (60 * 60)

SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks

Edit: Alternatively,TimestampDiff, aynı zamanda örnek sağlayarak daha zarif bir şekilde geçerli bir çözüm sağlayabilir:

SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');

Ve çözüm olabilir:

SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different
FROM tasks

Bu zincirdeki en yukarı olarak cevap YANLIŞ NOT! SAAT kullanarak sadece bir tamsayı olarak saat dönecektir. Aşağıda ondalık (yani 6,5 saat) olarak bir tamsayı ve dakika olarak saat geri dönmek için en popüler cevabı düzeltmek istiyorum.

TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours
HOUR(TIMEDIFF(endDate, startDate))

işe-eğer belki ben doğru dokümanları okuyorum.

TIMESTAMPDIFF(HOUR, startDate, endDate)

sanki, büyük zaman aralıkları ile çalıştığı için, bunu yapmak için en iyi yoldur

TIMESTAMPDIFF(HOUR, "2012-01-01 00:00:00", "2050-01-01 00:00:00")

Sonuç: 333120

süre

HOUR(TIMEDIFF("2050-01-01 00:00:00", "2012-01-01 00:00:00"))

Sonuç: 838

başarısız olur.

Yukarıdaki örnekte gördüğünüz gibi, şaşırtıcı hatta yıl 2038 yılında damgası sınırlama dışında çalışır.

TIMEDIFF TIME değerleri için izin verilen aralığı ile sınırlıdır, çünkü HOUR(TIMEDIFF(dateEnd, dateStart)), 838 olan tarafından döndürülen maksimum saat.

örneğin: startDate 2010-01-31 00:00:00 2010-01-31 19:24:22 endDate

SELECT (UNIX_TIMESTAMP(dateFin)-UNIX_TIMESTAMP(dateDebut))/3600 hour_diff
FROM tasks

SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600
FROM tasks 

iyi 19,4061 döndürür

SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different
FROM tasks

Ben de dönüştürülmesi dakika gerekir iken sadece saat döndürür.

SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks

returns 0. I think the first one is the most efficent. Thanks !!

Saatte diffrence almak için:

Hour(TIMEDIFF(date1,date2)) as Hour1

Minute diffrence almak için:

Minute(TIMEDIFF(date1,date2)) as Minute1

İkinci olarak farkını almak için:

Second(TIMEDIFF(date1,date2)) as Second1

Sen UNIX_TIMESTAMP SELECT sorgudaki hesaplama yapmak için kullanabilirsiniz.

SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff
  FROM tasks

UNIX_TIMESTAMP çağdan saniye sayısına datetime dönüştürmek. Sen saniyede farkı almak için hem zaman damgası çıkartmak olabilir. 3600 ile bölmek size saat farkı verecektir.