Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan PHP Carbon, hapus waktu dalam hitungan detik di mana dua periode waktu tumpang tindih

Yang dapat Anda lakukan adalah membuat DatePeriod interval 1 detik (saya menganggap ini bisnis penting, jadi harus ke detik) dan periksa apakah setiap detik berada dalam jam kerja hari itu. Jika ya, kurangi dari totalnya.

Ini sangat tidak efisien, meskipun. Misalnya, hanya untuk sehari penuh Anda harus membuat 86400 cek. Itu menjadi lambat cepat . Mungkin Anda dapat menggunakan interval 1 menit atau bahkan 1 jam jika persyaratan bisnis Anda memungkinkan, dan membuat beberapa perkiraan. Bagaimanapun, ini adalah bagaimana Anda dapat melakukan ini:

<?php
use Carbon\Carbon;

$startTime = Carbon::create(2017, 9, 10, 8, 20, 0);
$endTime = Carbon::create(2017, 9, 10, 18, 35, 0);
$duration = $startTime->diffInSeconds($endTime, true);

$interval = new DateInterval("PT1S");
$period = new DatePeriod($startTime, $interval, $endTime);

$secondsToSubtract = 0;

foreach ($period as $second) {
    $businessStart = clone $second;
    $businessStart->setTime(8, 0); // start business day
    $businessEnd = clone $second;
    $businessEnd->setTime(17, 0); // end business day

    if (!($second > $businessStart && $second < $businessEnd)) { // if the second is not a "business second", subtract it
        $secondsToSubtract++;
    }
}
var_dump($secondsToSubtract);
$realDuration = $duration - $secondsToSubtract;
var_dump($realDuration);

Anda tidak menyebutkan apakah akhir pekan adalah atau bukan hari kerja untuk Anda. Jika ya, cukup periksa apakah hari saat ini dalam iterasi adalah hari Sabtu atau Minggu dan kurangi semua detik tersebut.

Anda dapat melakukan banyak pengoptimalan di sini (menyimpan hari itu, misalnya), tetapi itu akan membawa Anda ke arah yang benar.

(Saya tidak bisa menunjukkan demo karena saya tidak bisa use Carbon di penyedia biasa)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Haruskah saya menggunakan tipe data datetime atau timestamp di MySQL?

  2. Tidak dapat menjatuhkan bidang di tabel MariaDB/MySql dengan KUNCI ASING

  3. Apa perbedaan antara BIT dan TINYINT di MySQL?

  4. Memisahkan Hasil Query PHP menjadi Kolom

  5. Mengurai cap waktu - lakukan di MySQL atau di PHP?