Page 1 sur 1

Formater des dates avec légèreté

Posté : 08 déc. 2007, 06:53
par Gofromiel
Je vous propose une petite classe qui se chargera de gérer vos dates avec dextérité, qui prendra soin des capitales des jours et des mois – si ça vous chante – et renverra une jolie chaîne en UTF-8 parce que l'ISO ça pue.

Pour plus de renseignements, merci de consulter mon article sur la mise en forme des dates.
class WdDateTime
{
	var $time;

	function WdDateTime($date='now')
	{
		$this->time = strtotime($date);
	}
	
	function modify($relative)
	{
		$this->time = strtotime($relative, $this->time);
	}
		
	function format($fmt,$upper=false)
	{
		$date = strftime($fmt, $this->time);

		if ($upper)
		{
			$date = preg_replace('#^[[:lower:]]|\s+[[:lower:]]#e', 'strtoupper("\0")', $date);
		}

		return utf8_encode($date);
	}
}
Un exemple peut-être ?
setlocale(LC_TIME, 'french');

$time = new WdDateTime('2007-12-08');

echo "Le mois prochain nous serons le : " . $time->format('%A %d %B %Y', '+1 month') . "<br />";

$time->modify('+10 year');

echo "Dans 10 ans nous serons le : " . $time->format('%A %d %B %Y') . "<br />";
echo "Jours suivants : ";

for ($i = 1 ; $i < 7 ; $i++)
{
    echo " " . $time->format('%A', "+$i day");
}

echo "<br />";
Devrait donner quelque chose comme :

Code : Tout sélectionner

Le mois prochain nous serons le : mardi 08 janvier 2008 Dans 10 ans nous serons le : vendredi 08 décembre 2017 Jours suivants : Samedi Dimanche Lundi Mardi Mercredi Jeudi
*** edit ***

Mise à jour en fonction des remarques de HyWaN.

Posté : 08 déc. 2007, 13:25
par Hywan
Sauf que t'as tout faux ;-). Mais l'idée était belle hein.
Typographiquement parlant, on ne met pas de majuscule au jours de la semaine, tout comme au mois. Et d'ailleurs, à cela j'ajouterais qu'on ne met plus l'accent circonflexe sur le « u » de « aout » (réforme de l'orthographe de mars 2005 si ma mémoire est bonne).
Et si on veut un affichage HTML propre, on met des espaces insécables (&nbsp; pour none-breaking space) entre chaque élément de la date.
Il y a des exceptions concernant la mise en forme pour les dates historiques, mais pas toutes. On ne va pas chipoter jusque là ;-).

Je dénigre, je dénigre, mais c'est astucieux quand même, bon travail :pouce:.

Posté : 08 déc. 2007, 15:16
par Gofromiel
Damned ! C'est à trente ans que j'apprends que les majuscules ne sont pas obligatoires pour le nom des jours et des mois. Je suis un peu déçu parce que je trouve ça très moche... Enfin, c'est comme les gens qui ne mettent pas d'accent sur les majuscules. Du coup j'ai rendu la mise en majuscule de la première lettre optionnelle. Pour les &nbsp, je préfère pas trop empiéter sur ce qu'en fera l'utilisateur, un str_replace() c'est pas très compliqué.

++

Posté : 08 déc. 2007, 16:18
par Victor BRITO
Et d'ailleurs, à cela j'ajouterais qu'on ne met plus l'accent circonflexe sur le « u » de « aout » (réforme de l'orthographe de mars 2005 si ma mémoire est bonne).
Moi, je continue à mettre une circonflexe : n'oublie pas l'étymologie (du latin Augustus, d'où la circonflexe pour montrer qu'il y avait un s à aoust :wink: ).

Posté : 08 déc. 2007, 16:24
par Hywan
Je sais bien, mais ce sont les réformes :(. Visiblement, quand tout le monde fait une faute, on modifie la langue, comme ça c'est plus une faute (je pense notamment aux haricots — aux zarikos —).

Posté : 08 déc. 2007, 16:45
par @rthur
j'ajouterais qu'on ne met plus l'accent circonflexe sur le « u » de « aout » (réforme de l'orthographe de mars 2005 si ma mémoire est bonne).
Et bien j'aurai appris quelque chose aujourd'hui... :)

Toutefois, 2 (petits) points à rectifier:
- il s'agit de la réforme de l'orthographe de 1990
- l'utilisation de l'accent circonflexe sur les lettres i et u de certains mots n'est pas interdit, il n'est juste plus obligatoire, donc les deux orthographes sont acceptées.

Pour ceux que ça intéressent:
http://fr.wikipedia.org/wiki/Rapport_de ... graphiques
http://www.academie-francaise.fr/langue ... tml#regles

Posté : 08 déc. 2007, 16:49
par Hywan
Pour l'utilisation de l'accent circonflexe, oui :). En revanche sur aout, c'est très récent.

Posté : 08 déc. 2007, 16:49
par Victor BRITO
Visiblement, quand tout le monde fait une faute, on modifie la langue, comme ça c'est plus une faute (je pense notamment aux haricots — aux zarikos —).
Je ne vais donc pas me hasarder à parler des "zandiKP", afin de te ménager. :wink:

Posté : 08 déc. 2007, 16:54
par Hywan
Visiblement, quand tout le monde fait une faute, on modifie la langue, comme ça c'est plus une faute (je pense notamment aux haricots — aux zarikos —).
Je ne vais donc pas me hasarder à parler des "zandiKP", afin de te ménager. :wink:
Haha :P.

Posté : 08 déc. 2007, 17:22
par naholyr
Sauf erreur de ma part, l'exemple que tu as donné ne fonctionnera pas (la boucle à la fin) : le deuxième argument de format() est un booléen pour activer ou non les majuscules, ce n'est pas un décalage de date :) donc d'après moi la boucle en fin d'exemple affichera "Lundi Lundi Lundi Lundi Lundi Lundi Lundi" (pour peu qu'on soit lundi hein xD).
for ($i = 1 ; $i < 7 ; $i++) 
{ 
    $time->modify("+$i day");
    echo " " . $time->format('%A', true);
}

Posté : 08 déc. 2007, 17:37
par Gofromiel
C'est bizarre, le code ressemble plutôt à ça :
for ($i = 1 ; $i < 7 ; $i++)
{
    echo " " . $time->format('%A', "+$i day", true);
}

Posté : 08 déc. 2007, 17:40
par Hywan
Ce que Naholyr veut dire, c'est que tu as modifier ta méthode à cause de moi. Maintenant, le second paramètre est un booléen (pour la majuscule). Ce n'est donc plus valide (enfin si, mais ça fera toujours vrai :P).