xelko/timeslots

基于开闭规则生成时间片段

dev-master / 0.1.x-dev 2016-07-14 18:03 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:09:27 UTC


README

基于开闭规则生成时间片段

规则格式

  <type de règles>= [<valeur unitaire>] ou [<valeur de début incluse>-<valeur de fin exclue>] [, ...];

规则类型

定义时间段

periods 或 p (定义从午夜开始的时间段,单位为分钟 [0..1440])

示例
  periods=480-720,730-910;

过滤器

days 或 d (定义格式为 YYYYMMDD 的日期)

示例
  days=20160317,20151224,20140125-20140129;

weekdays 或 wd (定义格式为 [0..6] 的星期几,周日为 0,周六为 6) (使用模 7)

示例
  weekdays=0,2,4-6;

birddays 或 bd (定义格式为 MMDD 的生日)

示例
  birddays=0130,0327,0401-0415;

yeardays 或 yd (定义格式为 [0..366] 的年日)

示例
  yeardays=27,42,128-217;

specialdays 或 sd (定义特殊日期) (easter, easterMonday, ascension, pentecost, pentecostMonday) 或 (复活节, 复活节星期一, 升天节, 圣灵降临节, 圣灵降临节星期一)

示例
  specialdays=easter, easterMonday, ascension, pentecost;

一般示例

$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"));