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 Discussion :

Formatage de date


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut Formatage de date


    Suite à une récente discussion sur le forum : formatage de date, j'ai créé une petite fonction de formatage.
    La chaine retournée est par défaut du type "jj/mm/aaaa", mais il est possible de passer une chaine à la fonction pour préciser le format souhaité.
    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
    /*
     * 	Formatage utilisé :
     * 		j : jour du mois
     * 		m : mois
     * 		a : année
     * 		h : heure
     * 		i : minutes
     * 		s : secondes
     */
    Date.prototype.format = function(){
    	this._nowFormat = arguments[0] || 'jj/mm/aaaa';
    	this._toLen2 = function(_nowStr){
    		_nowStr = _nowStr.toString();
    		return ('0'+_nowStr).substr(-2,2);
    	};
    	this._nowFormat = this._nowFormat.replace(/j+/, this._toLen2(this.getDate()));
    	this._nowFormat = this._nowFormat.replace(/m+/, this._toLen2(this.getMonth()+1));
    	this._nowFormat = this._nowFormat.replace(/a+/, this.getFullYear());
    	this._nowFormat = this._nowFormat.replace(/h+/, this._toLen2(this.getHours()));
    	this._nowFormat = this._nowFormat.replace(/i+/, this._toLen2(this.getMinutes()));
    	this._nowFormat = this._nowFormat.replace(/s+/, this._toLen2(this.getSeconds()));
    	return this._nowFormat;
    };
    L'utilisation est relativement simple, il suffit d'appeler la méthode format() à un objet Date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var now = new Date();
    alert(now.format());
    Page de test : http://dmouronval.developpez.com/format-date/
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Comme je ne manipule plus que des dates au format ISO long, version US (motif, voir : http://www.developpez.net/forums/d97...e-navigateurs/), j'ai créé une version à cet usage exclusif.

    Mes premiers tests donnent des résultats corrects.

    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
    /*
     * Date ISO format long, version US	
     */
    Date.prototype.formatISO = function(){
    	this._nowFormat = 'aaaa-mm-jjThh:ii:ss.000Szz:00';
    	this._toLen2 = function(_nowStr){
    		_nowStr = _nowStr.toString();
    		return ('0'+_nowStr).substr(-2,2);
    	};
    	this._nowFormat = this._nowFormat.replace(/j+/, this._toLen2(this.getDate()));
    	this._nowFormat = this._nowFormat.replace(/m+/, this._toLen2(this.getMonth()+1));
    	this._nowFormat = this._nowFormat.replace(/a+/, this.getFullYear());
    	this._nowFormat = this._nowFormat.replace(/h+/, this._toLen2(this.getHours()));
    	this._nowFormat = this._nowFormat.replace(/i+/, this._toLen2(this.getMinutes()));
    	this._nowFormat = this._nowFormat.replace(/s+/, this._toLen2(this.getSeconds()));
    	this._nowFormat = this._nowFormat.replace(/S+/, (this.getTimezoneOffset() < 0) ? ("+") : ("-"));
    	this._nowFormat = this._nowFormat.replace(/z+/, this._toLen2(Math.abs(this.getTimezoneOffset()/60)));
    	return this._nowFormat;
    };
    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
    console.log(new Date().formatISO());
     
    /*
     * 1977-04-22T01:00:00-05:00
     * 1977-04-22T08:00:00.000+02:00 En France, heure d'été.
     * Test OK sous C, F et IE dernières versions.
     */
    console.log(new Date("1977-04-22T01:00:00.000-05:00").formatISO());
     
    /*
     * 1977-01-22T01:00:00-05:00
     * 1977-01-22T07:00:00.000+01:00 En France, heure d'hiver.
     * Test OK sous C, F et IE dernières versions.
     */
    console.log(new Date("1977-01-22T01:00:00.000-05:00").formatISO());

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    console.log(new Date().formatISO());
     
    /*
     * 1977-04-22T01:00:00-05:00
     * 1977-04-22T08:00:00.000+02:00 En France, heure d'été.
     * Test OK sous C, F et IE dernières versions.
     */
    Quand tu as exécuté la fonction j'avais un an
    (ou bien tu as fait des expériences mystiques avec ton horloge système... ? )

    En tout cas merci pour tes tests je n'avais pas encore lu

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour Romain

    Comme d'habitude, format ISO ou pas, on peut créer une nouvelle date au choix (et avec le format ISO dans le fuseau horaire de son choix) et la méthode formatISO() donne l'équivalent local, au format ISO, en tenant compte de l'heure d'été si elle s'applique.

    // 1er janvier de l'an 1000 à 1h00 et 30s dans le fuseau horaire -5h par rapport à GMT
    var dAilleurs = new Date("1000-01-01T01:00:30.000-05:00");
    
    // la même heure au format texte US dans le fuseau horaire France
    // Wed Jan 01 1000 07:00:30 GMT+0100
    console.log(dAilleurs.toString());
    
    // le même instant, dans le fuseau horaire France au format ISO
    // 1000-01-01T07:00:30.000+01:00
    console.log(dAilleurs.formatISO());
    
    // en poussant le jeu inutilement, juste pour vérifier qu'il redonne bien la même date
    var dIci = new Date(dAilleurs.formatISO());
    
    // au format Locale, dans le fuseau horaire France
    // mercredi 1 janvier 1000 07:00:30
    console.log(dIci.toLocaleString());

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Bonjour Romain

    Comme d'habitude, format ISO ou pas, on peut créer une nouvelle date au choix (et avec le format ISO dans le fuseau horaire de son choix) et la méthode formatISO() donne l'équivalent local, au format ISO, en tenant compte de l'heure d'été si elle s'applique.
    Ben oui ^^ mais là tu as appelé .formatISO sur new Date()... pas sur une date construite artificiellement dans le passé à partir d'une String donnée... ^^

    Non ? Qu'est-ce que j'ai raté ?

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Ben oui ^^ mais là tu as appelé .formatISO sur new Date()... pas sur une date construite artificiellement dans le passé à partir d'une String donnée... ^^

    Non ? Qu'est-ce que j'ai raté ?


    console.log(new Date("1977-04-22T01:00:00.000-05:00").formatISO());
    
    // la date dépassée et dans un autre fuseau horaire
    new Date("1977-04-22T01:00:00.000-05:00")
    
    // je construis la date et je la sors au format ISO
    // au lieu de .toString() par exemple
    new Date("1977-04-22T01:00:00.000-05:00").formatISO()
    Je te conseille de faire quelques tests, tu comprendras mieux.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. [VBA-E] formatage cellule date
    Par jeff37 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/05/2006, 22h31
  2. Formatage de date en diverses langues
    Par Caroline1 dans le forum Access
    Réponses: 6
    Dernier message: 26/04/2006, 14h47
  3. Formatage de date et 0
    Par christel1982 dans le forum ASP
    Réponses: 16
    Dernier message: 03/11/2005, 11h35
  4. [MSSQL][SQLDATE] Formatage de dates
    Par djskyz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/09/2004, 10h36
  5. [tomcat] Formatage de date en FR
    Par PeteMitchell dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 10/05/2004, 11h41

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