IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Formater une date via un timestamp UNIX et un modèle modifiable [Sources]


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Pareil avec preg_replace() (puisque tout le boulot est fait dans le tableau) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ^^
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #3
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Et je vois pas mal l'utilisation multilingue !!
    On peut avoir un exemple d'utilisation en FR et en EN svp ?

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Oui effectivement c'est bien mieux avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    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 ?
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    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 ?

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/10/2009, 19h08
  2. [Debutant]récupération d'une Date via calendrier en javascript
    Par chihiro_ba dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/12/2006, 09h51
  3. Réponses: 3
    Dernier message: 18/11/2006, 21h44
  4. formater une date
    Par freud dans le forum Delphi
    Réponses: 4
    Dernier message: 17/10/2006, 08h47
  5. [Dates] formater une date
    Par mikebranque dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 23h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo