Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

xml tech : Technologies XML

[xml-tech] Jour de la semaine

[xml-tech] Jour de la semaine

Auteur: arno.phil(tiscali) <arno.phil@tiscali.fr>
Date: 23/08/2005 - 07:53
X-Mailer: The Bat! (v3.5) Professional

Bonjour,

je vous propose un fonction XSL qui vous permettra d'obtenir le jour de la
semaine à partir de n'importe quelle date depuis JC.

Elle sera appelée comme suit :
        <xsl:call-template name="affJourExt">
                <xsl:with-param name="jour">JJ</xsl:with-param>
                <xsl:with-param name="mois">MM</xsl:with-param>
                <xsl:with-param name="annee">AAAA</xsl:with-param>
        </xsl:call-template>
avec JJ = 1..31 ou 01..31
     MM = 1..12 ou 01..12
     AAAA = 1..9999 ou 0001..9999

Les jours 29,30 et 31 n'ont pas besoin d'être concordants avec le mois
(mais le résultat sera forcément faux)

Une variable (globale chez moi) en cas d'erreur :
<xsl:variable name="inconnuJour">[Jour introuvable]</xsl:variable>

La définition de la fonction :
(l'algorithme provient de
http://www.univ-lemans.fr/~hainry/tableaux/tabl1.html)
si vous avez des remarques ou des améliorations à apporter au code,
merci de m'en faire part !

<xsl:template name="affJourExt">
        <xsl:param name="jour"/>
        <xsl:param name="mois"/>
        <xsl:param name="annee"/>
        <!-- Siècle : partie entière du quotient par 100 de l'année-->
        <xsl:variable name="S">
                <xsl:value-of select="floor($annee div 100)" />
        </xsl:variable>
        <!-- Année : dans le siècle -->
        <xsl:variable name="A">
                <xsl:value-of select="$annee mod 100" />
        </xsl:variable>
        <!-- Marque du siècle
                        * avant le 9 décembre 1582, on a C = h ( 6 S + 4 )
                        * la calendrier a sauté les jours 10 à 19 décembre 1582
                        * depuis le 20 décembre 1582 : C = h ( 5 S + S : 4 - 1 ) -->
        <xsl:variable name="C">
                <xsl:choose>
                        <xsl:when test="($jour &lt; 9) and ($mois &lt; 12) and ($annee &lt; 1582)">
                                <xsl:value-of select="(6 * $S + 4) mod 7" />
                        </xsl:when>
                        <xsl:otherwise>
                                <xsl:value-of select="(5 * $S + floor($S div 4) -1) mod 7" />
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:variable>
        <!--Marque de l'année
                        * c'est le nombre Y = ( A + A : 4 ) mod 7 -->
        <xsl:variable name="Y">
                <xsl:value-of select="($A + floor($A div 4)) mod 7" />
        </xsl:variable>
        <!--Marque bissextile
                * Les années multiples de 4 sont bissextiles
                * Les années multiples de 100 ne sont pas bissextiles
                * Les années multiples de 400 sont bissextiles -->
        <xsl:variable name="B">
                <xsl:choose>
                        <xsl:when test="($annee mod 400) = 0">1</xsl:when>
                        <xsl:when test="($annee mod 100) = 0">0</xsl:when>
                        <xsl:when test="($annee mod 4) = 0">1</xsl:when>
                        <xsl:otherwise>0</xsl:otherwise>
                </xsl:choose>
        </xsl:variable>
        <!-- Marque du mois
                * janvier : M = 0 sauf si l'année est bissextile auquel cas M = 6
                * février : M = 3 sauf si l'année est bissextile auquel cas M = 2
                * mars : M = 3
                * avril : M = 6
                * mai : M = 1
                * juin : M = 4
                * juillet : M = 6
                * août : M = 2
                * septembre : M = 5
                * octobre : M = 0
                * novembre : M = 3
                * décembre : M = 5 -->
        <xsl:variable name="M">
                <xsl:choose>
                        <xsl:when test="($mois = 1) and ($B = 0)">0</xsl:when>
                        <xsl:when test="($mois = 1) and ($B = 1)">6</xsl:when>
                        <xsl:when test="($mois = 2) and ($B = 0)">3</xsl:when>
                        <xsl:when test="($mois = 2) and ($B = 1)">2</xsl:when>
                        <xsl:when test="$mois = 3">3</xsl:when>
                        <xsl:when test="$mois = 4">6</xsl:when>
                        <xsl:when test="$mois = 5">1</xsl:when>
                        <xsl:when test="$mois = 6">4</xsl:when>
                        <xsl:when test="$mois = 7">6</xsl:when>
                        <xsl:when test="$mois = 8">2</xsl:when>
                        <xsl:when test="$mois = 9">5</xsl:when>
                        <xsl:when test="$mois = 10">0</xsl:when>
                        <xsl:when test="$mois = 11">3</xsl:when>
                        <xsl:when test="$mois = 12">5</xsl:when>
                        <xsl:otherwise>ERREUR</xsl:otherwise>
                </xsl:choose>
        </xsl:variable>
        <!-- Marque du quantième (notée Q ) :
                * c'est le quantième lui même ou (au choix) son modulo 7 -->
        <xsl:variable name="Q">
                <xsl:value-of select="$jour mod 7" />
        </xsl:variable>
        <!-- Marque du jour
                # dimanche : J = 0
                # lundi : J = 1 ;
                # mardi : J = 2
                # mercredi : J = 3
                # jeudi : J = 4
                # vendredi : J = 5
                # samedi : J = 6 -->
        <xsl:variable name="J">
                <xsl:value-of select="($C +$Y +$Q +$M) mod 7" />
        </xsl:variable>
        <!-- Affichage du jour en toutes lettres -->
        <xsl:choose>
                <xsl:when test="$J = 0"><xsl:text>dimanche</xsl:text></xsl:when>
                <xsl:when test="$J = 1"><xsl:text>lundi</xsl:text></xsl:when>
                <xsl:when test="$J = 2"><xsl:text>mardi</xsl:text></xsl:when>
                <xsl:when test="$J = 3"><xsl:text>mercredi</xsl:text></xsl:when>
                <xsl:when test="$J = 4"><xsl:text>jeudi</xsl:text></xsl:when>
                <xsl:when test="$J = 5"><xsl:text>vendredi</xsl:text></xsl:when>
                <xsl:when test="$J = 6"><xsl:text>samedi</xsl:text></xsl:when>
                <xsl:otherwise><xsl:value-of select="$inconnuJour"/></xsl:otherwise>
        </xsl:choose>
</xsl:template>

--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de 
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant 
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Tue Aug 23 09:48:36 2005

Archive générée par hypermail 2.1.8 le 30/08/2005 - 10:02 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement