İki tarih arasındaki ofis saatleri sayısını hesaplamak için PHP

3 Cevap php

Biz 2 iş günü SLA dayalı olan bir hizmeti çalıştırmak, böylece istek Pazartesi günü 01:00 de teslim edilmesi durumunda, bu Çarşamba 01:00 tarafından doldurulmalıdır.

MM: Yani veritabanında iki MySQL YYYY / AA / GG HH damgaları var SS, ve 17:00 kadar 09:00 arasında çalışma saatlerine göre çalışma zamanında iki tarih arasındaki zaman çalışma dışarı bir yol, gerekir.

Herkes bana herhangi bir fikir verebilir misiniz?

3 Cevap

Basit yolu, o gün mevcut çalışma süresini içeren, her gün için bir çizgi ile veritabanına bir tablo saklamak olacaktır. Bu tatil ve yüksek boyu ile hafta biter işlemek sağlar ve kullanıcı tarafından belirlenen iki tarih arasındaki gün içinde bir miktar çalıştırarak mevcut süreyi alabilirsiniz.

Genel anlamda, zaman damgaları A ve A başlangıç ​​zamanı B, verilen:

  • A ve B arasındaki gün sayısını belirlemek (bunu yapmak kolay yolu vardır), bu D çağrı
  • HH ise: DD: damgası B SS büyük veya A eşittir, o zaman (gün) D vererek, zaman farkı H eklemek + H (zaman)
  • HH ise: DD: damgası B SS A daha az olduğu, D 1 çıkarma ve 8 saat eksi zaman farkı H eklemek, D vererek - 1 (gün) + 8 (saat) - H

A 01:00 olup olmadığını örnekte, Pazartesi ve B 01:00 Çarşamba, ardından D 2 olduğunu. Kez aynı olduğundan, H 0 ve böylece toplam fark 2 iş günüdür.

B Çarşamba 15:00 olsaydı, o zaman toplam fark 2 gün artı 2 saat olacaktır.

B Çarşamba 09:00 olsaydı, o zaman toplam fark 1 gün artı 4 saat olacaktır.

Yukarıdaki yöntem hafta sonları veya tatil işlemek değil, bu nedenle uygun değişiklikleri yapmak zorunda kalacak.

SQL ile bu oluşturmak sadece zor bir. MySQL zaman damgası arasındaki fark bu şekilde hesaplanabilir ...

SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1) 
FROM test AS T;

... Ama bu ofc dikkate herhangi bir ofis saat almaz.

SQL doesn't know ofis saatleri, ve bu gibi diğer faktörlere de (hafta sonları, resmi tatil ya da her neyse) güvenebilirsiniz ki unutmayın. Bu halletmek için, önce bir takvim tablo ayarlamak zorunda ve sonra hesaplamaları başlamak istiyorum.

Ben, birkaç yıl önce benzer bir sorun vardı orada ben saatleri ve tatilleri tanımlanmış olan bir arka uç komut kullanılır. Ilk etapta veri eklerken ben sonra gelecek damgası hesaplanmış, bu çok daha kolay oldu ve bir şekilde daha esnek.