Disponible pour vos projets! Contactez-moi

Business - Une bibliothèque PHP pour les calculs en heures ouvrées

Business - Une bibliothèque PHP pour les calculs en heures ouvrées Image

Récemment, j'ai crée Business, une bibliothèque PHP pour les calculs en heures ouvrées.

Elle peut être utilisée dans divers contextes où des heures d'ouverture ou de vacances sont impliquées, telles que des réservations, des feuilles de paie ou de temps.

Avec cette bibliothèque, vous pouvez facilement déterminer les dates de réservation, le nombre de jours ouvrés dans une période donnée ou la prochaine date d'ouverture de votre boutique.

Installation

Pour installer la dernière version avec Composer, lancez la commande suivante

$ composer require florianv/business

Utilisation

Tout d'abord, vous devez configurer une instance Business avant de commencer à effectuer des calculs.

<?php

use Business\Day;
use Business\Days;
use Business\Business;
use Business\SpecialDay;

// Heures d'ouverture pour chaque jour de la semaine. Si non spécifié, c'est considéré fermé
$days = [
    // Jours standard avec heures d'ouverture fixes
    new Day(Days::MONDAY, [['09:00', '13:00'], ['2pm', '5 PM']]),
    new Day(Days::TUESDAY, [['9 AM', '5 PM']]),
    new Day(Days::WEDNESDAY, [['10:00', '13:00'], ['14:00', '17:00']]),
    new Day(Days::THURSDAY, [['10 AM', '5 PM']]),

    // Journée spéciale avec des heures d'ouverture dynamiques selon la date
    new SpecialDay(Days::FRIDAY, function (\DateTime $date) {
        if ('2015-05-29' === $date->format('Y-m-d')) {
            return [['9 AM', '12:00']];
        }

        return [['9 AM', '5 PM']];
    }),
];

// Dates de vacances optionnelles
$holidays = [new \DateTime('2015-06-01'), new \DateTime('2015-06-02')];

// Fuseau horaire optionnel
$timezone = new \DateTimeZone('Europe/Paris');

// Créer une nouvelle instance Business
$business = new Business($days, $holidays, $timezone);

Opérations

Voici la liste des opérations actuellement implémentées.

  • within - Vérifie si une date est dans les heures ouvrées
<?php

// C'est un Lundi et dans les heures d'ouverture de Lundi
$monday = new \DateTime('2015-05-25 09:00');

// Selon la définition du jour spécial Vendredi, les heures d'ouverture sont de 09h00 à 12h00
// donc cette date n'est pas dans les heures ouvrées
$friday = new \DateTime('2015-05-29 12:01');

// => true
$business->within($monday);

// => false
$business->within($friday);
  • timeline - Retourne une timeline de dates ouvrées
<?php

// Vendredi 29 Mai à l'ouverture
$start = new \DateTime('2015-05-29 09:00');

// Lundi 29 Juin à la fermeture
$end = new \DateTime('2015-06-29 17:00');

// Intervalle d'un jour
$interval = new \DateInterval('P1D');

// Obtenir toutes les dates pendant la période
$dates = $business->timeline($start, $end, $interval);

// => 20
$businessDays = count($dates);

Comme vous pouvez le constater, il y a 20 jours ouvrés durant cette période (Lundi 1er et Mardi 2 Juin étant des jours fériés).

  • closest - Renvoie la date d'ouverture la plus proche d'une date donnée
<?php

$sunday = new \DateTime('2015-05-31');

// La date la plus proche après Dimanche est Mercredi à l'heure d'ouverture "2015-06-03 10:00:00"
// parce que Lundi et Mardi sont des jours fériés
$closestNext = $business->closest($sunday);

// La date la plus proche avant Dimanche est le Vendredi à l'heure de fermeture "2015-05-29 12:00:00"
$closestLast = $business->closest($sunday, Business::CLOSEST_LAST);

C'est tout pour le moment!

Si vous souhaitez suggérer une nouvelle fonctionnalité ou signaler un bug, n'hésitez pas à le faire sur le répertoire Github!