date en date lettre

Eléphant du PHP | 148 Messages

08 nov. 2008, 00:49

Bonsoir,

Actu du 05/11/2008

et je voudrais Actu du Jeudi 11 Novembre 2008 en sachant que l'info est prise dans la base de donnée.

dans la base de donnée l'info est stocké dans un champ date 2008-11-05
J'ai essayé de faire $mois = date ("w",$date); mais cela ne marche pas et $date contient 2008-11-05 dans notre cas.

Merci de votre aide :)

Mammouth du PHP | 959 Messages

08 nov. 2008, 02:04

Regarde, inspire toi de ça

T'as juste les slashes à changer, l'ordre, et se qu'il y a dans date() (D d M)

Eléphant du PHP | 148 Messages

08 nov. 2008, 02:17

moi ce qui m'intéresse c'est le date('w') car avec ça j'ai un chiffre entre 0 et 6 qui détermine le jour de la semaine et donc je peux afficher le jour en faisant le lien avec un tableau.

Moi problème est ce W doit être calculer en fonction de l'année et du mois. Les jours ne sont pas des mois. :D

Je sais pas si je suis assez clair.
Pour faire simple
<?php

$date = "2008-08-08"; //ici c'est un exemple en vrai je la prends dans la base de donnée
$jour ="date('w',$date)"; //affiche le jour en chiffre de 0 à 6 en fonction de $date

$jour_fr = array ('dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche');
echo $jour_fr[$jour];

?>

Mammouth du PHP | 959 Messages

08 nov. 2008, 02:45

Ah ok, bon alors dans ce cas là, tu doit utiliser mktime()
$jour_fr = array ('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'); 
$date = "2008-08-08";
list($annee, $mois, $jour) = explode('-', $date);

echo $jour_fr[date("w", mktime(0, 0, 0, $mois, $jour, $annee))];
normalement ça devrait marcher :)
Tu peux même en faire une fonction ;)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

08 nov. 2008, 03:00

ou bien: date("w", strtotime($date));

Pour plus de pratique, voici une fonction que j'ai écrite à l'occasion, qui formate une date donnée selon un format donné.
Le principe est de pouvoir donner un format style "jj/mm/aaaa" ou "jjjj j mmmm aaaa" etc. et le programme doit remplacer les formats j, m et a par les parties adéquates de la date donnée.

Donc, si le symbole est j ou jj alors le remplacer par le n° du jour mais si c'est jjj ou jjjjj faudra remplacer par le nom du jour (abrégé ou complet)
Et même principe pour les symboles du mois, de l'année et pourquoi pas l'heure, minutes et secondes.

Programme : dateFormat.php
<?php
// excéute et retourne la date formatée selon la demande
echo dateFormat($_GET["date"]?$_GET["date"]:date("Y-m-d H:i:s"), $_GET["format"]?$_GET["format"]:"jjjj j mmmm aaaa h:m:s");

// fonctions du traitement
function dateFormat($date=null, $format="jjjj j mmmm aaaa h:m:s"){
	// absence du format = retourne la date telle qu'elle
	if (trim($date) == "") $date = date("Y-m-d H:i:s"); // date courante si vide
	if (trim($format) == "") return $date;

	// décomposition du format de la date (on remplace tout séparateur possible par espace pour unifier le critère de décomposition sans modifier le format d'origine)
	if (strchr($format, "/")!== FALSE)      {$format_modifié = str_replace("/", " ", $format);}
	else if (strchr($format, "-")!== FALSE) {$format_modifié = str_replace("-", " ", $format); }
	else if (strchr($format, ".")!== FALSE) {$format_modifié = str_replace(".", " ", $format); }
	else $format_modifié = $format;
	//
	$parties = explode(" ", $format_modifié); // décomposition du format selon le séparateur : espace

	// traitements des parties de la date : jour, mois, année et temps
	foreach ($parties as $i=>$partie){
		switch ($partie){
			// Jour
			case "j"     : $format = str_replace($partie, date("j", strtotime($date)), $format); break;
			case "jj"    : $format = str_replace($partie, date("d", strtotime($date)), $format); break; 
			case "jjj"   : $format = str_replace($partie, substr(getJourFr(date("w", strtotime($date))), 0, 3), $format); break;
			case "jjjj"  : $format = str_replace($partie, getJourFr(date("w", strtotime($date))), $format); break;
			// Mois
			case "m"     : $format = str_replace($partie, date("n", strtotime($date)), $format); break;
			case "mm"    : $format = str_replace($partie, date("m", strtotime($date)), $format); break;
			case "mmm"   : $format = str_replace($partie, substr(getMoisFr(date("m", strtotime($date))), 0, 3), $format); break;
			case "mmmm"  : $format = str_replace($partie, getMoisFr(date("m", strtotime($date))), $format); break;
			// Année
			case "aa"    : $format = str_replace($partie, date("y", strtotime($date)), $format); break;
			case "aaaa"  : $format = str_replace($partie, date("Y", strtotime($date)), $format); break;
			// temps
			case "h" 	 : $format = str_replace($partie, date("H A", strtotime($date)), $format); break;
			case "h:m"   : $format = str_replace($partie, date("H:i A", strtotime($date)), $format); break;
			case "h:m:s" : $format = str_replace($partie,date("H:i:s A", strtotime($date)), $format); break;
		}
	}
	// retourne le format modifié par la date formatée
	return $format;
}
// fonction de traduction des noms jours et mois en français
function getJourFR($j){
	switch ($j){
		case 1: return "Lundi";
		case 2: return "Mardi";
		case 3: return "Mercredi";
		case 4: return "Jeudi";
		case 5: return "Vendredi";
		case 6: return "Samedi";
		default: return "Dimanche";
	}
}
function getMoisFR($m){
	switch ($m){
		case  2: return "Février";
		case  3: return "Mars";
		case  4: return "Avril";
		case  5: return "Mai";
		case  6: return "Juin";
		case  7: return "Juillet";
		case  8: return "Août";
		case  9: return "Septembre";
		case 10: return "Octobre";
		case 11: return "Novembre";
		case 12: return "Décembre";
		default: return "Janvier";
	}
}
?>
Pour la tester, taper les jeux d'essai suivants:
dateFormat.php?date=2008-11-8 02:00&format=jjjj j mmmm aaaa h:m:s
dateFormat.php?date=2008-11-8 02:00&format=jj/mm/aaaa h:m:s
dateFormat.php?date=2008-11-8 02:00&format=jj-mm-aa h:m
dateFormat.php?date=2008-11-8 02:00&format=jj.mm.aaaa h
ou encore : dateFormat.php?date=2008-11-8 02:00&format=Le jjjj j mmmm aaaa à h:m
etc.

Par contre, les séparateurs pris en charge dans cette version sont limités à : espace / - et .
Et seulement les : pour les heures
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 148 Messages

08 nov. 2008, 12:17

et bien merci pour tout vraiment clair et ça marche parfaitement :D