Date recurrente

MaZiaR -  
 MaZiaR -
pour la création d'un calendrier en PHP/PostgreSQL j'ai besoin de pouvoir "stocker" dans un champs ceux-ci par exemple :
- tous les lundi
- tous les jours
- tous les 13 du mois de mars
- tous les vendredi 13
- tous les premier samedi du mois
- ...

On m'a déjà suggérer d'utiliser ce format :

W DD MM
W = jours de la semaine
DD = jour du mois
MM mois de l'année
on aurait
tous les jours = *****
tous les lundi = 1**** (0=dimanche ...)
tous les 13 du mois de janvier = *1301

Mais comment dire tous les premiers samedi du mois ou tous les 2ème jeudi du
mois ?

Si qq'1 a une idée ou même des pistes ...

2 réponses

Marden Messages postés 1075 Statut Membre 210
 
Pour le 1er, 2ème, ... "jour" du mois , il suffit d'une condition du style "compris entre 01 et 07", "entre 08 et 14", ... (combinée avec la condition sur le jour).
Pour le dernier, la méthode n'est évidemment pas applicable !
0
PhP Messages postés 1774 Statut Membre 606
 
Bonsoir MaZiar,

Je ne connais pas ProgresSQL mais en PHP j'utiliserais :

<?php

function getDayOccurrence($date)
{
$day=date("d",$date);
return intval(($day-1) / 7)+1;
}

function getDayRank($date)
{
$day=date("d",$date);
$month=date("m",$date);
$year=date("Y",$date);

if ($day <= 7)
{
$rank=0; // position = premier
}
else
{
$rank=1; // position = ni premier ni dernier
// Si la date plus 7 jours tombe le mois suivant alors position = dernier
if (date("m",mktime(0,0,0,$month,$day+7,$year)) != $month) $rank=2;
}
return $rank;
}

// Ex 24 avril 2002
$date=mktime(0,0,0,4,24,2002);
echo "Date = ".date("d/m/Y",$date)."<br>";
echo "Occurrence du jour = ".getDayOccurrence($date)."<br>";
echo "Code position du jour = ".getDayRank($date)."<br>";

?>

Et dans la base j'utiliserais : W O R DD MM

W = jours de la semaine
O = occurrence du jour dans le mois
R = position particulière dans le mois
DD = jour du mois
MM mois de l'année

A toi d'adapter selon tes besoins ... ;:-)

@+
Philippe

[[  The Truth is Out There   ]]
0
MaZiaR
 
O = occurrence du jour dans le mois
W = jours de la semaine
DD = jour du mois
MM = mois de l'année

(ex: 1er jeudi du mois serait stocker dans un champs nommé "recurrence" comme ce-ci : 1|4|**|**)

C'est le format que j'ai adopté :)

Par contre je n'étais pas au stade de la fonction qui allait déchiffrer le format.
Je te remerci bcp :)
0