PHPackages                             xelko/timeslots - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. xelko/timeslots

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

xelko/timeslots
===============

Génération de tranches horaires à partir de règles d'ouverture et de fermeture

3101PHP

Since Jul 14Pushed 9y ago1 watchersCompare

[ Source](https://github.com/xelko/timeslots)[ Packagist](https://packagist.org/packages/xelko/timeslots)[ RSS](/packages/xelko-timeslots/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

TIMESLOTS
=========

[](#timeslots)

Génération de tranches horaires à partir de règles d'ouverture et de fermeture

Formats des règles
------------------

[](#formats-des-règles)

```
  = [] ou [-] [, ...];

```

Types de règle
--------------

[](#types-de-règle)

### définition des périodes

[](#définition-des-périodes)

#### periods ou p (Définition des périodes en minutes depuis minuit \[0..1440\])

[](#periods-ou-p-définition-des-périodes-en-minutes-depuis-minuit-01440)

##### exemple

[](#exemple)

```
  periods=480-720,730-910;

```

### filtres

[](#filtres)

#### days ou d (Définition des jours au format YYYYMMDD)

[](#days-ou-d-définition-des-jours-au-format-yyyymmdd)

##### exemple

[](#exemple-1)

```
  days=20160317,20151224,20140125-20140129;

```

#### weekdays ou wd (Définition des jours de la semaine au format \[0..6\] dimanche au samedi) (utilise le modulo 7)

[](#weekdays-ou-wd-définition-des-jours-de-la-semaine-au-format-06-dimanche-au-samedi-utilise-le-modulo-7)

##### exemple

[](#exemple-2)

```
  weekdays=0,2,4-6;

```

#### birddays ou bd (Définition des jours anniversaires au format MMDD)

[](#birddays-ou-bd-définition-des-jours-anniversaires-au-format-mmdd)

##### exemple

[](#exemple-3)

```
  birddays=0130,0327,0401-0415;

```

#### yeardays ou yd (Définition des jours de l'année au format \[0..366\])

[](#yeardays-ou-yd-définition-des-jours-de-lannée-au-format-0366)

##### exemple

[](#exemple-4)

```
  yeardays=27,42,128-217;

```

#### specialdays ou sd (Définition des jours spéciaux) (easter, easterMonday, ascension, pentecost, pentecostMonday) ou (pâques, lundiPâques, pentecôte, lundiPentecôte)

[](#specialdays-ou-sd-définition-des-jours-spéciaux-easter-eastermonday-ascension-pentecost-pentecostmonday-ou-pâques-lundipâques-pentecôte-lundipentecôte)

##### exemple

[](#exemple-5)

```
  specialdays=easter, easterMonday, ascension, pentecost;

```

Exemple générale
----------------

[](#exemple-générale)

```
$calendar = new \Xelko\TimeSlots\Calendar();

// aligne sur minuit
$calendar->setMidnightAlignment(true);

// plage de 30 minutes
$calendar->setGranularity(30);

// memorisation des 10 derniers calculs (pour accélération)
$calendar->setCacheSize(10);

// tout les jours de 510 minutes à 600 minutes (de 8h30 à 10h00)
$calendar->addOpenRules(["periods=510-600"]);

// chaque lundi au vendredi du mois de mars de 480 minutes à 720 minutes et 780 minutes à 1000 minutes
// ainsi que chaque 15 mai et 17 juin de 480 minutes à 1000 minutes
$calendar->addOpenRules([
    "wd=1-5;bd=0301-0331;periods=480-720,780-1000",
    "bd=0515,0617;periods=480-1000"
]);

// fermeture de 0 à 1440 (toute la journée) (prioritaire sur ouverture) chaque jour de pâques et lundi de Pâques et jour de pentecôte
// ainsi que chaque 1 janvier, 1 mai, 8 mai, 14 juillet fermé le matin
$calendar->addCloseRules([
    "sd=easter,easterMonday,ascension;periods=0-1440",
    "bd=0101,0501,0508,0714;periods=0-720"
]);

// récupère les périodes d'ouverture du 01 janvier 2014 12:20:00 au 31 décembre 2016 12:20:00
$aixiaperiods = $calendar->getPeriodsOfDays(new \DateTime("2014-01-01 12:20:00"),new \DateTime("2016-12-31  12:20:00"));

// récupère les tranches d'horaires d'ouverture valides du 01 janvier 2014  12:20:00 au 31 décembre 2016  12:20:00
$aixiaperiods = $calendar->getTimeSlotsOfDays(new \DateTime("2014-01-01  12:20:00"),new \DateTime("2016-12-31 12:20:00"));

```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/5a67ca2f00ec176e412518c1faa9f0d1787239210b4c0a7d4fd991232b2d69db?d=identicon)[xelko](/maintainers/xelko)

---

Top Contributors

[![xelko](https://avatars.githubusercontent.com/u/18519297?v=4)](https://github.com/xelko "xelko (9 commits)")

### Embed Badge

![Health badge](/badges/xelko-timeslots/health.svg)

```
[![Health](https://phpackages.com/badges/xelko-timeslots/health.svg)](https://phpackages.com/packages/xelko-timeslots)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
