Bonjour,

après avoir cherché de nombreuses heures un template qui transforme une DATE YYMMDD en jour julien et inversement en y ajoutant des jours,ayant trouvé la solution grâce à des formule,que j'ai ensuite codé en xsl

Je dépose mon code pour ceux qui aurons besoin de ces fonctionnalitées

Dans ce cas de figure j'ai un choose au début car je peux récupérer plusieurs dates(je précise que je travail dans E.D.I (échange de données informatisée) en passant par un outil de traduction

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  <!-- *******************************************************************************************
    *  Fonction qui permet calculer une DateOut= DateIn+n jours  déja formaté en entrée en yyMMdd 
    *  et  formatée en sortie en yyMMdd en passant par le calcul du jour julien et inverse
    *
    *  $DIN : Date en entrée au format yyMMdd
    *  $JOUR : Nombre de jour souhaités pour le calcul de la date 
    *  
    ************************************************************************************************ -->
    <xsl:param name="Valeur1"/>
    <xsl:param name="Valeur2"/>
    <xsl:param name="Valeur3"/>
    <xsl:param name="Valeur4"/>
    <xsl:param name="Valeur5"/>
    <xsl:param name="Valeur6"/>
    <xsl:param name="Valeur7"/>
    <xsl:param name="Valeur8"/>
    <xsl:param name="Valeur9"/>
    <xsl:param name="Valeur10"/>
    <xsl:param name="JOUR"/>
 
    <xsl:variable name="DIN">
    	<xsl:choose>
    		<xsl:when test="string-length($Valeur1) > 0"><xsl:value-of select="$Valeur1"/></xsl:when>
    		<xsl:when test="string-length($Valeur2) > 0"><xsl:value-of select="$Valeur2"/></xsl:when>
    		<xsl:when test="string-length($Valeur3) > 0"><xsl:value-of select="$Valeur3"/></xsl:when>
    		<xsl:when test="string-length($Valeur4) > 0"><xsl:value-of select="$Valeur4"/></xsl:when>
    		<xsl:when test="string-length($Valeur5) > 0"><xsl:value-of select="$Valeur5"/></xsl:when>
    		<xsl:when test="string-length($Valeur1) > 0"><xsl:value-of select="$Valeur6"/></xsl:when>
    		<xsl:when test="string-length($Valeur2) > 0"><xsl:value-of select="$Valeur7"/></xsl:when>
    		<xsl:when test="string-length($Valeur3) > 0"><xsl:value-of select="$Valeur8"/></xsl:when>
    		<xsl:when test="string-length($Valeur4) > 0"><xsl:value-of select="$Valeur9"/></xsl:when>
    		<xsl:when test="string-length($Valeur5) > 0"><xsl:value-of select="$Valeur10"/></xsl:when>
    	</xsl:choose>
    </xsl:variable>
 
    <!-- ********** DECOUPAGE DE LA DATE ********** -->
 
    <xsl:variable name="DINYY" select="concat(20,substring($DIN,1,2))" />
    <xsl:variable name="DINMM" select="substring($DIN,3,2)" />
    <xsl:variable name="DINDD" select="substring($DIN,5,2)" />
 
    <!-- ********** SI MOIS DE JANVIER OU FEVRIER ALORS MOIS+12 et AN-1  ********** -->
 
    <xsl:variable name="a0">
      <xsl:choose>
        <xsl:when test="number($DINMM) > '2'">
          <xsl:value-of select="number($DINYY)"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="number($DINYY) - 1"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
 
    <xsl:variable name="m0">
      <xsl:choose>
        <xsl:when test="number($DINMM) > '2'">
          <xsl:value-of select="number($DINMM)"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="number($DINMM) + 12"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
 
    <!-- ********** CALCUL JOUR JULIEN  ********** -->
 
    <xsl:variable name="a1" select="floor($a0 div 100)"/>
    <xsl:variable name="b1" select="floor($a1 div 4)"/>
    <xsl:variable name="c1" select="2 - $a1 + $b1"/>
    <xsl:variable name="e1" select=" floor(365.25 * ($a0 + 4716))"/>
    <xsl:variable name="f1" select="floor(30.6001 * ($m0 +1))"/>
    <xsl:variable name="JD1" select=" $c1 + $DINDD + $e1 + $f1 - 1524.5 "/>
        <!-- ********** AJOUT DU NOMBRE DE JOUR   ********** -->
        <xsl:variable name="JD2" select="$JD1 + $JOUR"/>
        <!-- ********** CONVERSION JOUR JULIEN EN DATE GREGORIENNE   ********** -->
        <xsl:variable name="q" select="$JD2 + 0.5"/>
        <xsl:variable name="z" select="floor($q)"/>
        <xsl:variable name="w" select="floor(($z - 1867216.25) div 36524.25) "/>
        <xsl:variable name="x" select="floor($w div 4) "/>
        <xsl:variable name="a" select="$z + 1 + $w - $x "/>
        <xsl:variable name="b" select="$a + 1524 "/>
        <xsl:variable name="c" select="floor(($b - 122.1) div 365.25) "/>
        <xsl:variable name="d" select=" floor(365.25 * $c) "/>
        <xsl:variable name="e" select="floor(($b - $d) div 30.6001) "/>
        <xsl:variable name="f" select=" floor(30.6001 * $e) "/>
        <xsl:variable name="DOUTDD" select="$b - $d - $f+($q - $z)"/>
        <xsl:variable name="DOUTMM">
          <xsl:choose>
            <xsl:when test="$e > '13'">
              <xsl:value-of select="$e - 13"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="$e - 1"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
        <xsl:variable name="DOUTYY">
          <xsl:choose>
            <xsl:when test="number($DOUTMM) = '01' or number($DOUTMM)='02' ">
              <xsl:value-of select="$c - 4715"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="$c - 4716"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
            <!-- ********** ECRITURE DE LA DATE GREGORIENNE AU FORMAT YYMMDD   ********** -->
         <xsl:value-of select="concat(format-number(substring($DOUTYY,3,2),'00'),format-number($DOUTMM,'00'),format-number($DOUTDD,'00'))"/>
Voici une autre solution sans passer par le calcul du jour julien en passant la la xs:date

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
42
43
44
45
46
  <!-- *******************************************************************************************
    *  Fonction qui permet calculer un DateOut= DateIn+n jours  déja formaté en entrée en yyMMdd 
    *  et  formatée en sortie en yyMMdd en passant par les fonctions xs:date
    *
    *  $DIN : Date en entrée au format yyMMdd
    *  $JOUR : Nombre de jour souhaités pour le calcul de la date 
    *  
    ************************************************************************************************ -->
    <xsl:param name="Valeur1"/>
    <xsl:param name="Valeur2"/>
    <xsl:param name="Valeur3"/>
    <xsl:param name="Valeur4"/>
    <xsl:param name="Valeur5"/>
    <xsl:param name="Valeur6"/>
    <xsl:param name="Valeur7"/>
    <xsl:param name="Valeur8"/>
    <xsl:param name="Valeur9"/>
    <xsl:param name="Valeur10"/>
    <xsl:param name="JOUR"/>
 
    <xsl:variable name="DIN">
    	<xsl:choose>
    		<xsl:when test="string-length($Valeur1) > 0"><xsl:value-of select="$Valeur1"/></xsl:when>
    		<xsl:when test="string-length($Valeur2) > 0"><xsl:value-of select="$Valeur2"/></xsl:when>
    		<xsl:when test="string-length($Valeur3) > 0"><xsl:value-of select="$Valeur3"/></xsl:when>
    		<xsl:when test="string-length($Valeur4) > 0"><xsl:value-of select="$Valeur4"/></xsl:when>
    		<xsl:when test="string-length($Valeur5) > 0"><xsl:value-of select="$Valeur5"/></xsl:when>
    		<xsl:when test="string-length($Valeur1) > 0"><xsl:value-of select="$Valeur6"/></xsl:when>
    		<xsl:when test="string-length($Valeur2) > 0"><xsl:value-of select="$Valeur7"/></xsl:when>
    		<xsl:when test="string-length($Valeur3) > 0"><xsl:value-of select="$Valeur8"/></xsl:when>
    		<xsl:when test="string-length($Valeur4) > 0"><xsl:value-of select="$Valeur9"/></xsl:when>
    		<xsl:when test="string-length($Valeur5) > 0"><xsl:value-of select="$Valeur10"/></xsl:when>
    	</xsl:choose>
    </xsl:variable>
 
    <!-- ********** FORMATAGE DE LA DATE ********** -->
 
    <xsl:variable name="DATEIN" select="concat(20,substring($DIN,1,2),'-',substring($DIN,3,2),'-',substring($DIN,5,2))" />
 
    <!-- ********** CALCUL DATE ********** -->
 
   <xsl:variable name="DATE">
    <xsl:value-of select="xs:date($DATEIN) + xs:dayTimeDuration(concat('P',$JOUR,'D'))" xmlns:xs="http://www.w3.org/2001/XMLSchema"></xsl:value-of>
    </xsl:variable>
 
   <xsl:value-of select="concat(substring($DATE,3,2),substring($DATE,6,2),substring($DATE,9,2))" />


si j'ajoute l'espace de nommage dans mon value-of select,cela est du à une contrainte de mon logiciel ,pour laquelle à l'utilisation de celui ci, il est plus simple d'ajouter l'espace de nommage au niveau de la ligne de calcul

voilà en espérant que cela pourra aider un maximum de personnes