Page 1 sur 1

Obtenir le jour à partir du numero du jour dans la semaine

Posté : 26 avr. 2007, 10:56
par Hells_Dark(off)
Bonjour,

J'ai ces données :
* Numéro de la semaine
* Numéro du jour dans la semaine (0 : dimanche, 1 lundi...6 Samedi)
* numéro du Mois
* Année

Et je souhaiterais obtenir le jour mais je ne trouve pas la formule/fonction adéquat.

Merci :)

Posté : 26 avr. 2007, 11:04
par @rthur
Bonjour,

Qu'entends tu par "obtenir le jour"?

Posté : 26 avr. 2007, 11:04
par Hells_Dark
Et bien, le numéro du jour dans le mois.
Exemple pour aujourd'hui : le 26 ;)

(Je fais un calendrier et j'affiche une semaine entière, avec les heures et tout. On connais le numéro de la semaine, mais pas celui du jour. On sait juste que c'est le lundi de la semaine, le mardi.. et moi, je veux le numéro du jour qui y correspond.)

Jusqu'ici, je me suis amusé avec date et mktime, mais il n'y a pas de parametre numéro de la semaine dans mktime :P

Posté : 26 avr. 2007, 11:18
par Jules Petibidon
hello,

tu peux t'amuser avec strtotime() <- elle est top cette fonction :)

beaucoup moins t'amuser en lisant ceci :

http://www.gnu.org/software/tar/manual/ ... r_109.html

et en application ca pourrait ressembler à cela :
echo date( 'D d/m/Y' , strtotime( 'APRIL 2007 +3 WEEK  FRIDAY' ) ) . '<br />';
toutefois, je ne garantis pas cela sur facture ;)

Edit :
Il se peut que ce soit un peu foireux avec les décalages de semaines, je sais vraiment pas si on peut s'y fier... enfin teste ! ;)

Posté : 26 avr. 2007, 11:24
par Hells_Dark
strtotime...pas bête du tout ça.
D'autant plus que je vais devoir exploiter des dates dans une bdd qui ne sont pas au format timestamp.

Merci, je vais regarder tout ça avec attention ;)

Faut que je trouve comment traiter l'affaire avec des numéro et pas avec des lettre, ce serait plus simple.
Genre :
echo date( 'd' , strtotime( '04-07 +3 WEEK  02' ) ) . '<br />'; 
D'ailleurs, le top serait :
echo date( 'd m' , strtotime( '07  51 00' ) ) . '<br />'; 
Et récupérer ainsi le numéro du jour et du mois, uniquement à partir de l'année et du numéro de la semaine, et le numéro du jour dans la semaine..

Posté : 26 avr. 2007, 12:24
par naholyr
Ne te torture pas à vouloir utiliser un format qui attend des lettres en lui donnant des chiffres. Un tableau à 12 entrées pour les mois, un à 7 entrées pour les jours, un "20" devant l'année, et tu as ton algo tout cuit.

Posté : 26 avr. 2007, 12:26
par Hells_Dark
Voui.. tu as sans doute raison.
je vais essayer avec des tableaux de conversion.

Merci

Mais strtotime sait aussi fonctionner avec certains formats avec des chiffres, c'est pour ça que je me demandais si il n'y avais pas plus simple.

Posté : 26 avr. 2007, 12:57
par Hells_Dark
j'y avais pas pensé mais en fait,
il me faut le numéro de jour et du mois, uniquement grace à l'année et au numéro de la semaine :/

Ca risque de me compliquer encore la tache..

:arrow:
 date(' d m ',strtotime($numeroSemaine.' - '.$annee))
J'avoue que je seche encore un peu..


Voici un bout de code pour que vous compreniez mieux mon but :
(après, ya la gestion des taches & co)
public function afficherSemaine($semaine, $annee) {
		for ($h=8;$h<20;$h++){
			$chaine .= '<table>'."\n";
			for ($m=00;$m<60;$m+=15){
				$chaine .= '<tr>';
				$chaine .= '<td>'.sprintf('%02d',$h).' : '.sprintf('%02d',$m).'</td>';
				for ($j=0;$j<=6;$j++){
					$mois = '';
					$jour = '';
		
					$chaine .= '<td><a href="calendrier.php?mode=addEv&heure='.$h.'&min='.$m.'&mois='.$mois.'&jour='.$jour.'&annee='.$annee.'">add</a></td>';

				}
				$chaine .= "</tr>\n";	
			}
			$chaine .= "</table>\n";
		}
return $chaine
}

Posté : 26 avr. 2007, 13:39
par Jules Petibidon
pourquoi faire simple quand on peut faire compliqué ? ;)
echo date( 'D d/m/Y' , strtotime( '2007-01-01 +51 WEEK TUESDAY' ) ) . '<br />';

Posté : 26 avr. 2007, 14:04
par Hells_Dark
Merci beaucoup

J'ai décidément un peu de mal..
Je comprends pas bien ta commande :
<?php echo date( 'D d/m/Y' , strtotime( '2007-01-01 +51 WEEK TUESDAY' ) ) . '<br />';

Déjà, je comprends pas très bien l'histoire du décalage (+xx), et ton format : 2007-01-01, AAAA-MM-JJ ?
Car mois, je n'ai pas JJ mais juste la position du jour dans la semaine (lundi, mardi, mercredi..) ni le numéro du mois d'ailleurs..

Je n'ai que AA (année) et SS (numéro de la semaine) et le jour (MONDAY, THURSDAY..)

Je vais faire des tests :P
Et surtout, je vais faire des recherches sur le format des dates :P

Posté : 26 avr. 2007, 14:08
par Jules Petibidon
non :)

2007-01-01 => 1er janvier 2007. date de référence pour le reste de l'année.
+51 WEEK => bah on ajoute 51 semaines à la date de reference.
TUESDAY => on demande le mardi

résultat : tu me dois des cadeaux ;)

Posté : 26 avr. 2007, 14:15
par Hells_Dark
Héhé, en effet :P
C'est parfait :)

J'ai compris la toute puissance de strtotime ^^

Posté : 26 avr. 2007, 14:51
par Hells_Dark
	public function afficherSemaine($semaine, $annee) {
		// On affiche la semaine et ses différents evenements
		
		$chaine = '<div class="calSemaine">';
		$chaine .= '<table><tr><th>Heure</th>';
		$nbSemaine = $semaine -1;
		for ($j=0;$j<=6;$j++){
			$jour = date('d/m', strtotime($annee.'-01-01 +'.$nbSemaine.' WEEK '.$convNumJour[$j]));
			$chaine .= '<th>'.$jour.'</th>';
		}
		$chaine .= '</tr></table>';
		
		for ($h=8;$h<20;$h++){
			$chaine .= '<table>'."\n";
			for ($m=00;$m<60;$m+=15){
				$chaine .= '<tr>';
				$chaine .= '<td>'.sprintf('%02d',$h).' : '.sprintf('%02d',$m).'</td>';
				for ($j=1;$j<=7;$j++){
					$mois = date('m', strtotime('2007-01-01 +'.$nbSemaine.' WEEK '.$convNumJour[$j]));
					$jour = date('d', strtotime('2007-01-01 +'.$nbSemaine.' WEEK '.$convNumJour[$j]));
					$chaine .= '<td><a href="calendrier.php?mode=addEv&heure='.$h.'&min='.$m.'&mois='.$mois.'&jour='.$jour.'&annee='.$annee.'">add</a></td>';
				}
				$chaine .= "</tr>\n";	
			}
			$chaine .= "</table>\n";
		}
		$chaine .= '</div>';
		return $chaine; 
	}
}
Et hop :)