Précédent   Forum des professionnels en informatique > PHP > Langage > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc. pour PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/09/2007, 13h51   #1
Invité de passage
 
Inscription : août 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Aldéhir Envoyer un message via Yahoo à Aldéhir
Par défaut Formater une date via un timestamp UNIX et un modèle modifiable

Auteur : Balluas Maxime (moi hein)
Titre : formater une date via un timestamp UNIX et un modele modifiable à volonté

Mmmh...autoLoad fortement déconseillé depuis la sortie de php6 ^^

Pour ma part une petite contribution par rapport aux dates, une fonction qui retourne une date au format que vous voulez en fonction d'un modèle que vous créez...le code est plus compréhensible

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// retourne une date selon un tiemstamp, un modele et le fichier de langue
public function date($timestamp,$model,$lang)
{
	// timestamp = la date a formater en base de timestamp unix
	// model = le modèle remplace des variables standards par leur valeur
	// exemple : pour une date "Mercredi 31 Juillet 2008 à 21:30"
	// le modele sera : "{LONG_DAY} {DAY} {LONG_MONTH} {LONG_YEAR} à {HOUR}:{MIN}"
	// il est complètement modulable
	// lang = le fichier de langue courant
 
	// tableau de base
	$transDate = array(
	'SEC' => date('s',$timestamp),
	'MIN' => date('i',$timestamp),
	'HOUR' => date('H',$timestamp),
	'DAY' => date('d',$timestamp),
	'MONTH' => date('m',$timestamp),
	'LONG_YEAR' => date('Y',$timestamp),
	'SHORT_YEAR' => date('y',$timestamp),
	'LONG_DAY' => $lang['DATE_'.strtoupper(date('l',$timestamp))],
	'SHORT_DAY' => substr($lang['DATE_'.strtoupper(date('l',$timestamp))],0,3),
	'LONG_MONTH' => $lang['DATE_'.strtoupper(date('F',$timestamp))],
	'SHORT_MONTH' => substr($lang['DATE_'.strtoupper(date('F',$timestamp))],0,4),
	);
 
	// remplacements dans le modele
	$model = str_replace('{SEC}',$transDate['SEC'],$model);
	$model = str_replace('{MIN}',$transDate['MIN'],$model);
	$model = str_replace('{HOUR}',$transDate['HOUR'],$model);
	$model = str_replace('{DAY}',$transDate['DAY'],$model);
	$model = str_replace('{MONTH}',$transDate['MONTH'],$model);
	$model = str_replace('{LONG_YEAR}',$transDate['LONG_YEAR'],$model);
	$model = str_replace('{SHORT_YEAR}',$transDate['SHORT_YEAR'],$model);
	$model = str_replace('{LONG_DAY}',$transDate['LONG_DAY'],$model);
	$model = str_replace('{SHORT_DAY}',$transDate['SHORT_DAY'],$model);
	$model = str_replace('{LONG_MONTH}',$transDate['LONG_MONTH'],$model);
	$model = str_replace('{SHORT_MONTH}',$transDate['SHORT_MONTH'],$model);
 
	// retour
	return $model;
}
Ici, $lang est un tableau qui a cette forme :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$lang = array(
'DATE_JANUARY' => 'Janvier',
'DATE_FEBRUARY' => 'Février',
'DATE_MARCH' => 'Mars',
'DATE_APRIL' => 'Avril',
'DATE_MAY' => 'Mai',
'DATE_JUNE' => 'Juin',
'DATE_JULY' => 'Juillet',
'DATE_AUGUST' => 'Aout',
'DATE_SEPTEMBER' => 'Septembre',
'DATE_OCTOBER' => 'Octobre',
'DATE_NOVEMBER' => 'Novembre',
'DATE_DECEMBER' => 'Décembre',
'DATE_MONDAY' => 'Lundi',
'DATE_TUESDAY' => 'Mardi',
'DATE_WEDNESDAY' => 'Mercredi',
'DATE_THURSDAY' => 'Jeudi',
'DATE_FRIDAY' => 'Vendredi',
'DATE_SATURDAY' => 'Samedi',
'DATE_SUNDAY' => 'Dimanche'
);
L'utilisation d'un modèle est très simple, par exemple :
"Le {LONG_DAY} {DAY} {LONG_MONTH} de l'année {LONG_YEAR} à {HOUR}:{MIN} et {SEC} secondes !"
Ensuite eh bien les élements du modèles sont modifiables et déplacables a volonté. Donc une seule fonction pour une infinité de mise en page de l'heure.
Aldéhir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2007, 07h18   #2
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Pareil avec preg_replace() (puisque tout le boulot est fait dans le tableau) :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public function date($timestamp,$model,$lang)
{
	// timestamp = la date a formater en base de timestamp unix
	// model = le modèle remplace des variables standards par leur valeur
	// exemple : pour une date "Mercredi 31 Juillet 2008 à 21:30"
	// le modele sera : "{LONG_DAY} {DAY} {LONG_MONTH} {LONG_YEAR} à {HOUR}:{MIN}"
	// il est complètement modulable
	// lang = le fichier de langue courant
 
	// tableau de base
	$transDate = array(
	'SEC' => date('s',$timestamp),
	'MIN' => date('i',$timestamp),
	'HOUR' => date('H',$timestamp),
	'DAY' => date('d',$timestamp),
	'MONTH' => date('m',$timestamp),
	'LONG_YEAR' => date('Y',$timestamp),
	'SHORT_YEAR' => date('y',$timestamp),
	'LONG_DAY' => $lang['DATE_'.strtoupper(date('l',$timestamp))],
	'SHORT_DAY' => substr($lang['DATE_'.strtoupper(date('l',$timestamp))],0,3),
	'LONG_MONTH' => $lang['DATE_'.strtoupper(date('F',$timestamp))],
	'SHORT_MONTH' => substr($lang['DATE_'.strtoupper(date('F',$timestamp))],0,4),
	);
 
	$model = preg_replace("/\{([A-Z_]*)\}/e", "\$transDate['\\1']", $model);
 
	return $model;
}
Pour l'__autoload, je veux bien que ce soit mignon comme tout, mais il faudra m'expliquer la remarque :
Mmmh...autoLoad fortement déconseillé depuis la sortie de php6 ^^
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2007, 11h00   #3
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Et je vois pas mal l'utilisation multilingue !!
On peut avoir un exemple d'utilisation en FR et en EN svp ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2007, 13h20   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par is_null Voir le message
Pareil avec preg_replace() (puisque tout le boulot est fait dans le tableau) :
puisque tout est déjà prêt ça consommera peut-être moins de ressources sans expression régulière

Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function formatDate($timestamp, $modele, $lang)
{
    // timestamp = la date a formater en base de timestamp unix
    // model = le modèle remplace des variables standards par leur valeur
    // exemple : pour une date "Mercredi 31 Juillet 2008 à 21:30"
    // le modele sera : "{LONG_DAY} {DAY} {LONG_MONTH} {LONG_YEAR} à {HOUR}:{MIN}"
    // il est complètement modulable
    // lang = le fichier de langue courant
 
    // tableau de base
    $transDate = array(
        '{SEC}' => date('s', $timestamp),
        '{MIN}' => date('i', $timestamp),
        '{HOUR}' => date('H', $timestamp),
        '{DAY}' => date('d', $timestamp),
        '{MONTH}' => date('m', $timestamp),
        '{LONG_YEAR}' => date('Y', $timestamp),
        '{SHORT_YEAR}' => date('y', $timestamp),
        '{LONG_DAY}' => $lang['DATE_' . strtoupper(date('l', $timestamp))],
        '{SHORT_DAY}' => substr($lang['DATE_' . strtoupper(date('l', $timestamp))], 0, 3),
        '{LONG_MONTH}' => $lang['DATE_' . strtoupper(date('F', $timestamp))],
        '{SHORT_MONTH}' => substr($lang['DATE_' . strtoupper(date('F', $timestamp))], 0, 4),
    );
 
    return str_replace(array_keys($transDate), array_values($transDate), $modele);
}


Citation:
Envoyé par Maxoo Voir le message
Et je vois pas mal l'utilisation multilingue !!
On peut avoir un exemple d'utilisation en FR et en EN svp ?
il suffit de passer en argument le tableau "$lang" qui est là :
http://www.developpez.net/forums/sho...72#post2473272
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2007, 15h09   #5
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Code :
date(time(),"Le {LONG_DAY} {DAY} {LONG_MONTH} de l'année {LONG_YEAR} à {HOUR}:{MIN} et {SEC} secondes !",$lang);
On est obligé de se collitiner le tab des lang ?
C'est pas un peu mieux de faire un paramètre et d'appeler à la fin de la fonction et qu'on aille chercher le bon tableau, ou mieux encore que le tableau comporte des sous tableau suivant les langues.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2007, 16h49   #6
Invité de passage
 
Inscription : août 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Aldéhir Envoyer un message via Yahoo à Aldéhir
Oui effectivement c'est bien mieux avec :
Code :
return str_replace(array_keys($transDate), array_values($transDate), $model);
Par contre attention à bien modifier les clés du tableau en leur ajoutant {} sinon l'affichage sera erroné.

Pour l'aspect multilingue, ce bout de code est utilisé au sein de mon script de blog (actuellement en dev), qui est nativement multilingue. Il y a donc une variable dans l'objet principal qui contient un tableau de langue, et dont l'extrait des dates est ici présent. Quand la fonction formatDate() est appelée, l'objet qui le fait lui passe le contenu de la langue courante, qui est chargé bien avant dans le constructeur de l'objet principal.
Par exemple voila le résultat du modèle utilisé dans notre exemple :
"{LONG_DAY} {DAY} {LONG_MONTH} {LONG_YEAR} à {HOUR}:{MIN}"


Sinon, concernant la méthode magique autoLoad, disons qu'avec la sortie de php6, quelques articles d'analyse des changements de la nouvelle version montrent du doigt sa gourmandise en ressource. Je ne prends pas parti dans ce débat je signifie ce que j'ai lu seulement, je n'utilise moi meme pas cette fonction, je suis adepte du bon vieux "prepend" clair et lisible :p
Aldéhir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 04h51   #7
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
mathieu : merci pour cette précision et bien joué

Sinon, concernant la méthode magique autoLoad, disons qu'avec la sortie de php6, quelques articles d'analyse des changements de la nouvelle version montrent du doigt sa gourmandise en ressource.
C'est pourtant depuis les dernieres versions que nous pouvons carrement utiliser plusieures fonctions d'autoload avec spl ...
On pourrait voir où est-ce que c'est écrit s'il-vous-plait ?
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 16h43   #8
Invité de passage
 
Inscription : août 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Aldéhir Envoyer un message via Yahoo à Aldéhir
Je ne garde malheureusement pas trace dans mes book marks de ce genre de truc, et mon historique débordant de ces quelques 7 derniers jours ne va pas plus m'aider (je me demande d'ailleurs des fois a quoi ça sert exactement). Surtout que comme je disais, je n'utilise pas __autoload donc je ne m'y suis vraiment pas attardé.
Il existe des ressources contradictoires me direz vous, fort heureusement vous répondrais je

Qu'en est il de ce présent bout de code au préalable posté dans les codes sources du premier topic ?
Aldéhir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h50.


 
 
 
 
Partenaires

Hébergement Web