Manipulation de dates

Eléphant du PHP | 71 Messages

15 nov. 2006, 19:06

bonjour,

je cherche a creer un agenda avec prise de rendez-vous.

j'aurait aimer avoir votre aide car je n'arrive pas à recuperer le premier jour du mois pour demarrer le calendrier dans la bonne cellule.
		<table border="1">
		<?php

		$calendar_txt['mois'] = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet',
													'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
		$calendar_txt['jours'] = array('Lundi', 'Mardi', 'Mercredi','Jeudi', 'Vendredi', 'Samedi',	'Dimanche');
		
		$d = 1; 		// jour
		$m = date("m"); // mois
		$y = date("Y"); // annee
		
		$mois = mktime( 0, 0, 0, $m, $d, $y ); // timestamp du mois indiqué
		
		setlocale(LC_ALL, 'fr_FR');
				
		$jour=1; // compteur de jours
		$dernierJour = date("t",$mois); // dernier jour du mois

		for($i=0;$i<7;$i++) // ceation des lignes du calendrier
		{
			if($i==0) // si c'est la premiere ligne
			{
				echo "<tr>"; // On ouvre un ligne
				for($j=0;$j<7;$j++) // Pour chaque jour de la semaine
				{
					echo "<th>".$calendar_txt['jours'][$j]."</th>"; // affiche le nom du jour dans une cellule
				}
				echo "</tr>"; // on ferme la ligne
				
			}else{ // sinon
			
				echo "<tr>"; // On ouvre un ligne
				for($j=0;$j<7;$j++) // Pour chaque jour de la semaine
				{
					if($jour<=$dernierJour) // Si ce n'est pas la fin du mois
					{
						// On affiche une cellule avec le numero du jour
						echo "<td>";
						echo ($jour == date("d")?"<b>".$jour."</b>":$jour);
						echo "</td>";
						
					}else{ // sinon on affiche une cellule vide
					
						echo "<td>-</td>";
					}
					$jour++;
				}
				echo "</tr>";
			}
		}
		?>
</table>
merci a vous!

Mammouth du PHP | 1776 Messages

15 nov. 2006, 19:25

Un message d'erreur peut être ? :roll:
Une piste ?

ViPHP
ViPHP | 1961 Messages

15 nov. 2006, 19:28

Bonjour,

Utilise
date('w', mktime(....))
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 71 Messages

15 nov. 2006, 22:31

merci à tous les deux ! :D

j'aurait du lire plus attentivement le manuel de le fonction date() , merci Ajoloca :oops:

voici le code modifié et qui fonctionne :
		<table border="1">
		<?php

		$calendar_txt['mois'] = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet','Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
		$calendar_txt['jours'] = array('Lundi', 'Mardi', 'Mercredi','Jeudi', 'Vendredi', 'Samedi',	'Dimanche');
		
		$d = 1;
		$m = date("m");
		$y = date("Y");
		
		$mois = mktime( 0, 0, 0, $m, $d, $y ); // timestamp du mois indiqué
		
		setlocale(LC_ALL, 'fr_FR');
				
		$cellule = 1; // compteur de cellules
		$jour = 1; // Compteur de jours
		
		$premierJour = date("w",$mois); // premier jour du mois
		$dernierJour = date("t",$mois); // dernier jour du mois

		for($i=0;$i<7;$i++) // ceation des lignes/semaines du calendrier
		{
			if($i==0) // si c'est la premiere ligne (nom des jours)
			{
				echo "<tr>";
				for($j=0;$j<7;$j++) // Pour chaque jour de la semaine
				{
					echo "<th>".$calendar_txt['jours'][$j]."</th>"; // affiche le nom du jour dans une cellule
				}
				echo "</tr>";
				
			}else{ // sinon les lignes sont des semaines
			
				echo "<tr>";
				for($j=0;$j<7;$j++) // Pour chaque jour de la semaine
				{
					if($cellule >= $premierJour && $jour <= $dernierJour)
					{
						echo "<td>";
						echo ($jour == date("d")?"<b>".$jour."</b>":$jour); // on affiche le numero du jour
						echo "</td>";
						$jour++; // On passe au jour suivant
					}
					else
					{
						echo "<td>";
						echo "-";
						echo "</td>";	
					}
					$cellule ++;
				}
				echo "</tr>";
			}
		}
		?>
</table>
merci encore !

Eléphant du PHP | 71 Messages

15 nov. 2006, 22:32

j'ai une deuxieme question sur la manipulation des dates, si cela ne vous ennuie pas bien sur :lol:

etant donné ceci :
$jourCourant = date("d"); // Vaut 15
$moisCourant = date("m"); // Vaut 11
$anneeCourante = date("Y"); // Vaut 2006
$semaineCourante = date("W",mktime(0,0,0,$moisCourant,$jourCourant,$anneeCourante)); // Vaut 46
comment puis-je construire ma requete pour chercher les rendez-vous de la semaine en cours (46) ?

pour ce faire chaque enregistrement de ma table rdv possede un champs date de debut et date de fin, du type "aaaa-mm-jj hh:mm:ss".

pouvez-vous m'aider une fois de plus ?

Mammouth du PHP | 19672 Messages

15 nov. 2006, 22:38

Utilise la fonction SQL WEEK(date) dans une clause WHERE.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

15 nov. 2006, 23:46

ralala merci milles merci cyrano :D

vous connaissez les manuels php/mysql par coeur je suis epaté :shock:

merci à tous pour votre aide plus que precieuse !

Eléphant du PHP | 71 Messages

20 nov. 2006, 00:34

je suis desolé de vous ennuyer encore avec ca mais la manipulation de date n'est pas simple :?

ayant declarer les variables suivante :
$jourCourant = date("d");
$moisCourant = date("m");
$anneeCourante = date("Y");

$date = mktime( 0, 0, 0, $moisCourant, $jourCourant, $anneeCourante );
je desire recuperer la date du 1er jour de la semaine ainsi que celle du dernier.

dans la doc php j'ai lu ceci :
$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
il faudrait que je fasse de meme, mais au lieu d'ajouter 1 à date("d") j'aimerait soustraire ou ajouter le nombre de jour passés à $date depuis le debut de semaine.

avez vous une idée pour effectuer ce calcul ?

merci à vous :)

Mammouth du PHP | 19672 Messages

20 nov. 2006, 00:59

Un jour = 24 heures X 60 minutes X 60 secondes = 86400 secondes

Transforme ta date de départ en timestamp avec mktime(), ajoutes-y 86400 * le nombre de jour que tu veux et transforme avec date("format", le-resultat) pour récupérer une date normale.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 nov. 2006, 01:02

Avec dimanche comme premier jour (comme fonctionne PHP)
<?php
$numAujourdhui = date("w");
echo $aujourdhui  = date("d");
echo $premierJour = date("d") - $numAujourdhui ;
echo $dernierJour = date("d") + (7 - $numAujourdhui);
?>
Ainsi tu peux calculer le nombre de jours passés, le nombre de jours qu'il reste, et les utiliser dans ton calcul.

Eléphant du PHP | 71 Messages

20 nov. 2006, 16:47

merci Cyrano et ouckileou :D c'est vraiment pas facile de travailler avec les dates !

en tout cas grace à vous j'arrive à afficher les evenement de la base dans un intervalle d'une semaine merci pour tout ! :wink:
Avec dimanche comme premier jour (comme fonctionne PHP)
je n'etait pas au courant et grace à cette precision je me suis apercu que dans le manuel php de date("w") on compte de 0 (pour dimanche) à 6 (pour samedi) j'ai donc ton code de la maniere suivante :
<?php 
$numAujourdhui = date("w"); 
echo $aujourdhui  = date("d"); 
echo $premierJour = date("d") - $numAujourdhui ; 
echo $dernierJour = date("d") + (6 - $numAujourdhui); 
?>
merci encore à tous, vos conseils sont d'une aide plus que precieuse !