date (trimestre) un code plus simple

rollus
Invité n'ayant pas de compte PHPfrance

05 déc. 2008, 23:25

Bonjour,

J'affiche un calendrier par trimestre, selon le mois en cours.
voici le code que j'utilise:

Code : Tout sélectionner

//annee en cours par defaut $annee_en_cours= date('Y'); //mois en cours par defaut $mois_en_cours=date('n'); //Determine le trimestre en cours if($mois_en_cours==1||$mois_en_cours==2||$mois_en_cours==3){ $date_mois1_tri=1; } if($mois_en_cours==4||$mois_en_cours==5||$mois_en_cours==6){ $date_mois1_tri=4; } if($mois_en_cours==7||$mois_en_cours==8||$mois_en_cours==9){ $date_mois1_tri=9; } if($mois_en_cours==10||$mois_en_cours==11||$mois_en_cours==12){ $date_mois1_tri=10; }
Cela me permet d'avoir le premier du trimestre en cours.

Je trouve que ma démarche (mon code) est un peu compliquée, peut-on être plus simple ou comment optimiser ce bout de code.

Merci d'avance

Eléphant du PHP | 254 Messages

05 déc. 2008, 23:58

Salut,

Il y a plusieurs possibilité mais en voici une
//annee en cours par defaut 
$annee_en_cours= date('Y'); 
//mois en cours par defaut 
$mois_en_cours=date('n'); 
//Determine le trimestre en cours
switch($mois_en_cours)
{
    case 1:
    case 2:
    case 3:
        $date_mois1_tri=1; 
        break;
    case 4:
    case 5:
    case 6:
        $date_mois1_tri=4; 
        break;
    case 7:
    case 8:
    case 9:
        $date_mois1_tri=7; 
        break;
    case 10:
    case 11:
    case 12:
        $date_mois1_tri=10; 
        break;
    default:
        echo "Valeur impossible pour le mois en cours";
        break;
}
ou une autre :)
//annee en cours par defaut 
$annee_en_cours= date('Y'); 
//mois en cours par defaut 
$mois_en_cours=date('n'); 

//Determine le trimestre en cours
$date_mois1_tri = ($mois_en_cours<=3?1:($mois_en_cours<=6?4:($mois_en_cours<=9?7:10)));


ViPHP
ViPHP | 2287 Messages

06 déc. 2008, 00:46

Version matheuse :
//mois en cours par defaut 
$mois_en_cours=date('n'); 

//Determine le trimestre en cours (1,2,3,4)
$tri_en_cours = floor(($mois_en_cours-1)/3)+1;

//Determine le premier mois du trimestre en cours
$date_mois1_tri = 3*floor(($mois_en_cours-1)/3)+1;

EDIT : je rajoute l'explication, par étapes :

- On a notre mois en cours qui varie de 1 à 12 par pas de 1.
- On a donc ($mois_en_cours -1) qui varie de 0 à 11 par pas de 1 (ça va être plus pratique pour diviser à l'étape suivante, car 0 divisé par X donne 0)
- On a donc ($mois_en_cours-1)/3 qui varie de 0 à 3,666....67 par pas de 0,333...
- floor() transforme un nombre à virgule en nombre entier en arrondissant à l'entier inférieur. On a donc floor(($mois_en_cours-1)/3) qui varie de 0 à 3 par pas de 1.
- finalement, floor(($mois_en_cours-1)/3)+1 nous donne le numéro du trimestre courant tel qu'on le décrit humainement (nous sommes au 4ème trimestre).

Il y a juste une petite partie qui change à la fin pour trouver le numéro du premier mois du trimestre en cours, je te laisse découvrir et comprendre la différence (ou si vraiment tu ne comprends rien, oublie tout ça et choisis une des autres solutions proposées par furiouslol qui marcheront tout aussi bien).
Modifié en dernier par Calimero le 06 déc. 2008, 02:02, modifié 3 fois.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

rollus
Invité n'ayant pas de compte PHPfrance

06 déc. 2008, 01:40

Merci de vos réponses

Je vais prendre le temps de tester vos propositions.
Pour la solution "matheuse", j'ai pas vraiment saisi....
Je ne suis pas de la même planète, désolé

ViPHP
ViPHP | 2287 Messages

06 déc. 2008, 02:04

Merci de vos réponses

Je vais prendre le temps de tester vos propositions.
Pour la solution "matheuse", j'ai pas vraiment saisi....
Je ne suis pas de la même planète, désolé
Tu n'as jamais regardé le jeu télévisé des chiffres et des lettres ? :?

J'ai ajouté une explication si tu es intéressé.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

rollus
Invité n'ayant pas de compte PHPfrance

10 déc. 2008, 02:00

Merci Calimero pour les explications.
Lorsque j'avais posté la réponse à vos propositions, je n'avais pas "vu" que Calimero avais déjà posté un explicatif en complément de sa solution.
C'est limpide et j'ai pigé.

Merci encore à vous.

Eléphant du PHP | 139 Messages

11 déc. 2008, 02:04

Bonsoir,

J'ai posté ce message en tant qu'invité "rollus".
J'aimerais le marquer résolu, mais je n'y arrive pas.
Pourtant, je me suis connecté(en fait, lors de mon post, je ne me souvenais plus de mon de passe). :-))))))

Merci encore pour l'aide

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

11 déc. 2008, 09:01

J'ai posté ce message en tant qu'invité "rollus".
J'aimerais le marquer résolu, mais je n'y arrive pas.
La fonctionnalité "Mettre [Résolu]" n'est accessible qu'aux membres identifiés.
Je viens de mettre le "Résolu" pour toi.
Pourtant, je me suis connecté
Tu t'es connecté, mais depuis.
Or tu as posté ton 1er message en tant qu'invité.

Mauri45
Invité n'ayant pas de compte PHPfrance

01 juin 2012, 14:25

Bonjour, j'ai beaucoup apprécié la méthode matheuse ;) mais comment peut on obtenir le premier mois du trimestre suivante en utilisant la même methode???
Merci

ViPHP
ViPHP | 2577 Messages

01 juin 2012, 16:27

$suivant = ($debut_trimestre + 3) % 12 ;

Soit :
1 => 4
4 => 7
7 => 10
10 => 1

Sur le principe, fait une fonction pour ce genre de calcul, ca te permettra d'en avoir la complexité dans un coin sans gêner la lecture du reste de ton code.

POP987
Invité n'ayant pas de compte PHPfrance

14 juin 2012, 23:08

Bonsoir,
Votre méthode m'a beaucoup aider. mais maintenant je demande votre aide.
j'ai besoin d'afficher les trimestres (trimestre=4 semaines) entre deux dates dont la durée entre eux est 12 trimestre (3 ans).

exemple:
date début=01/04/20111
date fin=01/04/2014
2011 | 2012 | 2013 | 2014|
[T2 |T3 | T4 || T1 | T2 | T3 | T4 || T1 | T2 | T3 | T4 || T1 |

Merci.

POP987
Invité n'ayant pas de compte PHPfrance

14 juin 2012, 23:11

Bonsoir,
Votre méthode m'a beaucoup aider. mais maintenant je demande votre aide.
j'ai besoin d'afficher les trimestres (trimestre=4 mois) entre deux dates dont la durée entre eux est 12 trimestre (3 ans).

exemple:
date début=01/04/20111
date fin=01/04/2014
2011 | 2012 | 2013 | 2014|
[T2 |T3 | T4 || T1 | T2 | T3 | T4 || T1 | T2 | T3 | T4 || T1 |

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juin 2012, 09:59

salut,


Il serait plus simple d'ouvrir un sujet a toi .
1/ Trouver le début du trimestre en cours (à l'aide de ce sujet)
2/ Utiliser DateTime::add pour avoir les trimestre suivant.

Pour info un trimestre c'est 3 mois ;)

@+
Il en faut peu pour être heureux ......

ogoubin
Invité n'ayant pas de compte PHPfrance

12 oct. 2015, 16:16

$trimestre = ceil($mois/3)