Page 1 sur 2

Affichage d'une date en format français

Posté : 19 janv. 2010, 15:13
par jben30900
Bonjour à tous,
je viens de monter quelques pages pour des amis qui font du cirque sur lesquelles s'affichent leurs prochaines date de tournée.
Le site tourne sur mes pages perso de sfr, j'ai une base de données Mysql et les dates (stockées en timestamp) s'affichent en format yyyy-mm-dd, ce qui n'est pas pratique pour nous autres français... mais ce sont mes premiers tout, tout petits pas en php et je ne sais absolument pas ou insérer une fonction qui retourne la date ou autre méthode...
Tout mon code est généré par dreamweaver et je suis encore largué par la syntaxe; j'ai eu beau regarder les solutions proposées sur le forum, je ne sais pas quoi faire du code proposé.

je vous balance la partie du tableau ou je fais la requete des dates (là où les dates s'affichent, quoi...)

Code : Tout sélectionner

<td width="100" nowrap="nowrap"><div align="left"><span class="Style1"><?php echo $row_date_spectacle['date'];?></span></div></td> <td width="150" nowrap="nowrap" class="Style1"><div align="left"><?php echo $row_date_spectacle['lieu']; ?></div></td> <td width="200" nowrap="nowrap" class="Style1"><div align="left"><?php echo $row_date_spectacle['description']; ?></div></td> <td width="350"><a href=<?php echo $row_date_spectacle['lien']; ?> target="_blank"> <div align="left"><span class="Style7"><?php echo $row_date_spectacle['lien']; ?></span></div>
merci à ceux qui prendront le temps de m'aider.

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 15:38
par AB
On vient d'en parler dans ce topic
$tableau_date = explode('-',$row['date']);
$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

$date = date('l j F Y',$timestamp);

$cible = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','January','February','March','April','May','June','July','August','September','October','November','December');
$rempl = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobtre','novembre','décembre',);

$date = str_replace($cible,$rempl,$date);

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 16:19
par stealth35
http://fr.php.net/manual/fr/function.strftime.php
http://fr.php.net/manual/fr/function.strtotime.php
setlocale(LC_TIME, 'french');
	
$date = '2010-01-19';
echo strftime('%A %d %B %Y', strtotime($date));

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 17:32
par jben30900
Merci à vous 2 d'avoir répondu si rapidement, mais vos réponses ne m'aident pas - je m'explique :
- quand je dis "format français" je veux juste dire "06/02/10" au lieu de '2010-02-06 00:00:00" (ce qui s'affiche après ma requete "<?php echo $row_date_spectacle['date']; ?>")
- 2ème pb, je ne sais pas où inserer le code que vous me proposez - je ne suis qu'un "embryon" en php, et c'est dreamweaver qui génère le code.
je vous balance le code de ma page, et si vous pouviez me dire où insérer le code que vous me proposez ça me permettrais de mieux comprendre la syntaxe du php.

Code : Tout sélectionner

<?php require_once('Connections/bassecour.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } mysql_select_db($database_bassecour, $bassecour); $query_date_spectacle = "SELECT `date`, lieu, `description`, lien FROM spectacle WHERE compagnie LIKE '%cub%' ORDER BY `date` ASC"; $date_spectacle = mysql_query($query_date_spectacle, $bassecour) or die(mysql_error()); $row_date_spectacle = mysql_fetch_assoc($date_spectacle); $totalRows_date_spectacle = mysql_num_rows($date_spectacle); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Cie le Cubitus du Manchot</title> <style type="text/css"> <!-- body { background-color: #000000; margin-top: 10px; } .Style1 {font-size: small} .Style2 { font-size: xx-large; color: #990000; } .Style6 {font-size: large; font-weight: bold; } .Style7 {font-size: x-small} --> </style></head> <table border="1" cellpadding="2" cellspacing="0" bordercolor="#000000"> <tr> <td bgcolor="#888551"><strong>date</strong></td> <td bgcolor="#888551"><strong>lieu</strong></td> <td bgcolor="#888551"><strong>description</strong></td> <td bgcolor="#888551"><strong>lien</strong></td> </tr> <?php do { ?> <tr bgcolor="#DBD0B7"> <td><div align="left"><span class="Style1"><?php echo $row_date_spectacle['date']; ?></span></div></td> <td class="Style1"><div align="left"><?php echo $row_date_spectacle['lieu']; ?></div></td> <td class="Style1"><div align="left"><?php echo $row_date_spectacle['description']; ?></div></td> <td><a href="<?php echo $row_date_spectacle['lien']; ?>" target="_blank"> <div align="left"><span class="Style7"><?php echo $row_date_spectacle['lien']; ?></span></div> </a></td> </tr> <?php } while ($row_date_spectacle = mysql_fetch_assoc($date_spectacle)); ?> </table> <?php mysql_free_result($date_spectacle); ?>
je sais, c dur,dur de bosser avec des débutants, mais on a tous commencé un jour...
merci de vos réponses.

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 17:56
par stealth35
<?php echo strftime('%x', strtotime($row_date_spectacle['date'])); ?>

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 18:11
par AB
Variante avec une fonction

Code : Tout sélectionner

<?php require_once('Connections/bassecour.php'); ?> <?php function Date_fr($date) { setlocale(LC_TIME, 'french'); return strftime('%d/%m/%y', strtotime($date)); } if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } mysql_select_db($database_bassecour, $bassecour); $query_date_spectacle = "SELECT `date`, lieu, `description`, lien FROM spectacle WHERE compagnie LIKE '%cub%' ORDER BY `date` ASC"; $date_spectacle = mysql_query($query_date_spectacle, $bassecour) or die(mysql_error()); $row_date_spectacle = mysql_fetch_assoc($date_spectacle); $totalRows_date_spectacle = mysql_num_rows($date_spectacle); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Cie le Cubitus du Manchot</title> <style type="text/css"> <!-- body { background-color: #000000; margin-top: 10px; } .Style1 {font-size: small} .Style2 { font-size: xx-large; color: #990000; } .Style6 {font-size: large; font-weight: bold; } .Style7 {font-size: x-small} --> </style></head> <table border="1" cellpadding="2" cellspacing="0" bordercolor="#000000"> <tr> <td bgcolor="#888551"><strong>date</strong></td> <td bgcolor="#888551"><strong>lieu</strong></td> <td bgcolor="#888551"><strong>description</strong></td> <td bgcolor="#888551"><strong>lien</strong></td> </tr> <?php do { ?> <tr bgcolor="#DBD0B7"> <td><div align="left"><span class="Style1"><?php echo Date_fr($row_date_spectacle['date']); ?></span></div></td> <td class="Style1"><div align="left"><?php echo $row_date_spectacle['lieu']; ?></div></td> <td class="Style1"><div align="left"><?php echo $row_date_spectacle['description']; ?></div></td> <td><a href="<?php echo $row_date_spectacle['lien']; ?>" target="_blank"> <div align="left"><span class="Style7"><?php echo $row_date_spectacle['lien']; ?></span></div> </a></td> </tr> <?php } while ($row_date_spectacle = mysql_fetch_assoc($date_spectacle)); ?> </table> <?php mysql_free_result($date_spectacle); ?>

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 18:14
par stealth35
ta le petit paramètre %x qui fais en %d/%m/%y , pas besion d'utilisé setlocale pour ce paramètre la (mais ca reste a verifier sur certaine config), sinon le faire avec date()

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 18:31
par AB
ta le petit paramètre %x qui fais en %d/%m/%y , pas besion d'utilisé setlocale pour ce paramètre la (mais ca reste a verifier sur certaine config), sinon le faire avec date()
Oui effectivement normalement pas besoin d'utiliser setlocale pour ce paramètre. En même temps ça gêne pas et s'il lui prend de changer le format d'affichage...

Pour le %x, chez moi ça s'obstine à afficher l'année avec quatre chiffres contrairement à ce qu'indique le manuel, mystère #-o

EDIT : OK j'ai trouvé, %x fonctionne et affiche l'année avec deux chiffres si on ne spécifie pas le setlocale en français. Sinon il affiche l'année sur quatre chiffres. Un comportement un peu inattendu mais bon...

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 19:28
par NuDub
Salut,
Je te propose une fonction que j'aime bien (qui n'est pas de mon cru, mais d'un tutoriels) :
function mepd($date)
{
        if(intval($date) == 0) return $date;
        
        $tampon = time();
        $diff = $tampon - $date;
        
        $dateDay = date('d', $date);
        $tamponDay = date('d', $tampon);
        $diffDay = $tamponDay - $dateDay;
        
        if($diff < 60 && $diffDay == 0)
        {
                return 'Il y &agrave; '.$diff.'s';
        }
        
        else if($diff < 600 && $diffDay == 0)
        {
                return 'Il y &agrave; '.floor($diff/60).'m et '.floor($diff%60).'s';
        }
        
        else if($diff < 3600 && $diffDay == 0)
        {
                return 'Il y &agrave; '.floor($diff/60).'m';
        }
        
        else if($diff < 7200 && $diffDay == 0)
        {
                return 'Il y &agrave; '.floor($diff/3600).'h et '.floor(($diff%3600)/60).'m';
        }
        
        else if($diff < 24*3600 && $diffDay == 0)
        {
                return 'Aujourd\'hui &agrave; '.date('H\hi', $date);
        }
        
        else if($diff < 48*3600 && $diffDay == 1)
        {
                return 'Hier &agrave; '.date('H\hi', $date);
        }
        
        else
        {
                return 'Le '.date('d/m/Y', $date).' &agrave; '.date('h\hi', $date).'.';
        }
}
Par contre la date est avec 4 nombres et il y a l'heure, mais bon après il faut voir pour adapter.

Donc ensuite pour l'utilisation en fait tu fais exemple :
mepd($var['champsSQL_timestamp']);
Assez pratique quand tu en as besoin dans différente page.

exemple d'affichage :
19/01/2010 06:33

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 20:08
par AB
@NuDub
S'il récupère une date sous cette forme '2010-02-06 00:00:00', c'est que c'est au format datetime et non pas un timestamp. Donc ta fonction ne pourrait pas être utilisée directement. Par ailleurs elle retourne un interval de temps et ce n'est pas ce qu'il demande.

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 20:33
par stealth35
@NuDub
S'il récupère une date sous cette forme '2010-02-06 00:00:00', c'est que c'est au format datetime et non pas un timestamp. Donc ta fonction ne pourrait pas être utilisée directement. Par ailleurs elle retourne un interval de temps et ce n'est pas ce qu'il demande.
ouai, sauf si il cast en date dans la requete (mais c'est pas le cas)

sinon la fonction strtotime fait pas mal de miracle on conversion string -> timestamp

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 21:04
par AB
ouai, sauf si il cast en date dans la requete (mais c'est pas le cas)
Pas certain que ce soit une option prévue avec dreamweaver :lol:

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 21:13
par stealth35
ouai, sauf si il cast en date dans la requete (mais c'est pas le cas)
Pas certain que ce soit une option prévue avec dreamweaver :lol:
je sais pas je connais pas dream, mais on peux toujours changer a la main genre,
FROM_UNIXTIME(date, '%d/%m/%Y') as date

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 23:20
par AB
C'était une plaisanterie :wink:

Re: Affichage d'une date en format français

Posté : 19 janv. 2010, 23:32
par jben30900
<?php echo strftime('%x', strtotime($row_date_spectacle['date'])); ?>
désolé pour cette réponse tardive, mais j'avais 5 enfants à nourrir et coucher, alors tout de suite, ça prend un peu de temps...
merci à toi de m'avoir répondu, même si la forme de ton message est troublante : ni bonjour ni encouragement ni, comme je le stipulais humblement, une petite explication syntaxique quant à l'emplacement de cette fonction...
un pur informaticien, quoi! mais qui prend le temps de se ballader sur les forums et de sauver les embryons en détresse.(Y a des fois, je m'pose des questions sur la nature humaine...)
bon, bref, j'en ai déduit que ma requête "$row_extraction_dates['date']" devenait la variable de ta fonction "strftime('%x', strtotime($row_date_spectacle['date']))", mais (et peut etre me suis-je planté) l'affichage est curieux :
01/10/10 au lieu de 10/01/10.
ne sachant pas quoi faire de plus, j'ai essayé l'autre possibilité, celle d'AB, et ça marche nikel! en + ça m'a permis de mieux comprendre comment on defini les fonctions et comment on les appelle quand on en a besoin.(3000 messages en 3 ans, ça fait déjà une certaine expérience!...merci à toi pour ton investissement).
Merci aussi à nubnub de sa collaboration, mais honnetement je n'ai pas pris le temps de comprendre toute la logique de ta fonction car je ne m'interressais qu'à un probleme d'affichage et pas de calcul; j'y reviendrais quand je maitriserais un peu + ce nouveau langage.
Plus on est nombreux et plus on a de chance de trouver la solution adaptée - vive les communautés!