calendrier personnalisé

calendrier personnalisé - PHP - Programmation

Marsh Posté le 04-11-2012 à 12:54:56    

Bonjour,
j'aimerais a terme me faire mon propre calendrier pour un jeu php
 
ma question est de savoir
comment faire pour incrémenter une valeur en fonction de la date
par exemple
 
je vais avoir un certain nombre de jour par mois non constant
je vais avoir une liste de jour  
et une liste de mois
 
comment je peux faire pour dire, le premier janvier 2011 on était le nawak 8 moutarde 245
et chaque jour php me spawn la variable suivante sur la liste que j'ai rentré.
 
Je suis pas trop fort en php mais ce code me semble pas si compliqué
mais pourtant je ne vois pas comment faire
merci de m'aider :D

Reply

Marsh Posté le 04-11-2012 à 12:54:56   

Reply

Marsh Posté le 04-11-2012 à 22:53:26    

je sais pas si j'ai bien compris : tu veux un calendrier perso ?
tu devrais regarder ici :
http://php.net/manual/fr/function.date.php
 
tu fournit un format pour récupérer uniquement le jour, puis le mois, puis l'année, ...
après tu fait ta cuisine dessus : enlever 1500 à l'année, multiplier les jours par 2,diviser les mois par 4 ...
 
par contre si j'ai bien compris, tu veux effectuer des actions tous les jours ? On ne peut pas laisser tourner indéfiniment un script... là tu vas avoir besoin d'un bdd

Reply

Marsh Posté le 05-11-2012 à 09:53:17    

ce que je voulais dire c'était par exemple je vais mettre le nom (fictifs) de jour dans un array, et je veux demander à php s'il est lundi prend l'array 0 s'il est mardi prend l'array 1 etc (incrémentation)
De même pour le nombre de jour depuis le début du mois,
on est le 5 novembre mais je veux qu'on soit le 20. et puis on reviens au moi suvant le 30

Reply

Marsh Posté le 05-11-2012 à 15:53:22    

et bien c'est ce que je disais je pense :
date('N'); te donnera 1 aujourd'hui 7 pour dimanche
date('d'); te donnera 5 aujourd'hui
date('m'); te donnera 11 pour novembre
date('Y'); te donnera 2012
 
si tu veux faire un calendrier perso tu fais
$day=date('d');
$mois=date('m');
$annee=date('Y');
et pour tes jours, tu fais un tableau avec les arrays
array(1 => 'janviertropcool', 'fevrierdlaballe', 'marsdelespace'); etc

Reply

Marsh Posté le 05-11-2012 à 17:36:36    

merci beaucoup mais regarde
if ($day=5) { $myday=20 ; };
if ($day=6) {$myday=21; }
 
donc je fais comment pour l'incrémentation parce que c'est ca le problème?

Reply

Marsh Posté le 05-11-2012 à 17:41:02    

non c'est pas bon il me faut aussi un array qui retourne à 1 une fois qu'il atteint 30

Reply

Marsh Posté le 08-11-2012 à 09:56:37    

up

Reply

Marsh Posté le 08-11-2012 à 20:02:37    

Imaginons, un calendrier à 3 mois.
Le premier mois fait 25 jours.
Le second mois fait 12 jours.
Le troisième mois fait 72 jours.
L'année fait donc 25 + 12 + 72 = 109 jours
 
Le temps 0 du calendrier est défini au "8/11/2012 à 20:18:09" soit le timstamp unix : define(TEMPS0, 1352402289)
 
On récupère l'instant courant grâce à time() auquel on soustrait TEMPS0;
$secondesEcouleDepuisT0 = time() - TEMPS0;
 
On calcule le nombre de jours écoulés depuis TEMPS0 pour que ça soit plus pratique à manipuler.
$joursEcouleDepuisT0 = ($secondesEcouleDepuisT0  - ($secondesEcouleDepuisT0 % (3600*24))) / (3600*24);
 
Pour récupérer l'année en cours c'est "on est l'année ". floor($joursEcouleDepuisT0 / 109);
 
Le but maintenant est de savoir quel mois on est.
 
On calcule le nombre de jours écoulés depuis le début de l'année courante.
 
$joursDeLAnneeCourante = $joursEcouleDepuisT0 % 109;
 
On pose le tableau suivant : $joursParMois = array(25, 12, 72);
 
Il faut produire un tableau avec les jours cumulatifs par mois.
 
$joursCumulParMois = array(25, 25+12, 25+12+72);
 
On termine par un foreach même s'il doit y avoir un moyen plus optmisé mathématiquement.
 

Code :
  1. foreach ($joursCumulParMois as $nMois => $cumul) {
  2.   if ($joursDeLAnneeCourante < $cumul) {
  3.      echo "On est le jour ". ($joursDeLAnneeCourante - $cumul + $joursParMois[$nMois]). " du mois ". ($nMois). "\n";
  4.      break;
  5.   }
  6. }


Message édité par czh le 08-11-2012 à 21:18:44
Reply

Marsh Posté le 08-11-2012 à 20:47:40    

Imaginons maintenant que la semaine fasse 9 jours : 5 jours pour bosser et un long week-end de 4 jours. Et que T0 était le premier jour de repos du week-end.
 
Pour savoir quel jour, on est dans le calendrier. Il suffit de faire :
echo "on est le jour de la semaine ". (($joursEcouleDepuisT0 + 5) % 9);

Reply

Marsh Posté le 08-11-2012 à 21:39:58    

Il y a un truc vachement important à savoir quand on fait des calendrier, c'est qu'il existe non seulement des années bissextiles, mais également des années qui ont 53 semaines (années dont le jour de l'an est un jeudi).
 
Pense bien à utiliser date('o') plutôt que date ('Y')...
 
 
Mais si tu veux créer ton propre calendrier, il faut effectivement utiliser time(), cad le nombre de secondes écoulées depuis le 1er Janvier 1970, et ensuite faire tes calculs là-dessus (ex: un jour réel = 3600 secondes).
 
Attention au bug de l'an 2038 (http://fr.wikipedia.org/wiki/Bug_de_l'an_2038) si tu utilises un système 32 bits.


Message édité par CyberDenix le 08-11-2012 à 21:44:57

---------------
Directeur Technique (CTO)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed