Page 1 sur 1
date (trimestre) un code plus simple
Posté : 05 déc. 2008, 23:25
par rollus
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
Posté : 05 déc. 2008, 23:58
par furiouslol
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)));
Posté : 06 déc. 2008, 00:46
par Calimero
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).
Posté : 06 déc. 2008, 01:40
par rollus
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é
Posté : 06 déc. 2008, 02:04
par Calimero
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é.
Posté : 10 déc. 2008, 02:00
par rollus
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.
Posté : 11 déc. 2008, 02:04
par rolusseum
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
Posté : 11 déc. 2008, 09:01
par albat
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é.
Re: date (trimestre) un code plus simple
Posté : 01 juin 2012, 14:25
par Mauri45
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
Re: date (trimestre) un code plus simple
Posté : 01 juin 2012, 16:27
par Mazarini
$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.
Re: date (trimestre) un code plus simple
Posté : 14 juin 2012, 23:08
par POP987
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.
Re: date (trimestre) un code plus simple
Posté : 14 juin 2012, 23:11
par POP987
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 |
Re: date (trimestre) un code plus simple
Posté : 15 juin 2012, 09:59
par moogli
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
@+
Re: date (trimestre) un code plus simple
Posté : 12 oct. 2015, 16:16
par ogoubin
$trimestre = ceil($mois/3)