Date recurrente
MaZiaR
-
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 ...
- 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
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 !
Pour le dernier, la méthode n'est évidemment pas applicable !
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 ]]
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 ]]
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 :)
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 :)