Formater des dates avec légèreté

Eléphant du PHP | 121 Messages

08 déc. 2007, 06:53

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.
Modifié en dernier par Gofromiel le 08 déc. 2007, 15:10, modifié 1 fois.

ViPHP
ViPHP | 4674 Messages

08 déc. 2007, 13:25

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:.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 121 Messages

08 déc. 2007, 15:16

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é.

++

Mammouth du PHP | 2937 Messages

08 déc. 2007, 16:18

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

ViPHP
ViPHP | 4674 Messages

08 déc. 2007, 16:24

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 —).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 déc. 2007, 16:45

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
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 4674 Messages

08 déc. 2007, 16:49

Pour l'utilisation de l'accent circonflexe, oui :). En revanche sur aout, c'est très récent.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 2937 Messages

08 déc. 2007, 16:49

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:

ViPHP
ViPHP | 4674 Messages

08 déc. 2007, 16:54

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

08 déc. 2007, 17:22

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

Eléphant du PHP | 121 Messages

08 déc. 2007, 17:37

C'est bizarre, le code ressemble plutôt à ça :
for ($i = 1 ; $i < 7 ; $i++)
{
    echo " " . $time->format('%A', "+$i day", true);
}

ViPHP
ViPHP | 4674 Messages

08 déc. 2007, 17:40

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).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).