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

Hells_Dark(off)
Invité n'ayant pas de compte PHPfrance

26 avr. 2007, 10:56

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 :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 avr. 2007, 11:04

Bonjour,

Qu'entends tu par "obtenir le jour"?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 11:04

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

Eléphant du PHP | 259 Messages

26 avr. 2007, 11:18

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 ! ;)

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 11:24

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..
Modifié en dernier par Hells_Dark le 26 avr. 2007, 12:25, modifié 1 fois.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

26 avr. 2007, 12:24

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.

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 12:26

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.

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 12:57

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
}

Eléphant du PHP | 259 Messages

26 avr. 2007, 13:39

pourquoi faire simple quand on peut faire compliqué ? ;)
echo date( 'D d/m/Y' , strtotime( '2007-01-01 +51 WEEK TUESDAY' ) ) . '<br />';

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 14:04

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
Modifié en dernier par Hells_Dark le 26 avr. 2007, 14:09, modifié 1 fois.

Eléphant du PHP | 259 Messages

26 avr. 2007, 14:08

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 ;)

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 14:15

Héhé, en effet :P
C'est parfait :)

J'ai compris la toute puissance de strtotime ^^

Eléphanteau du PHP | 10 Messages

26 avr. 2007, 14:51

	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 :)