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

JavaScript Discussion :

Dysfonctionnement toLocaleDateString() suivant date soumise


Sujet :

JavaScript

  1. #1
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut Dysfonctionnement toLocaleDateString() suivant date soumise
    Salut

    Le hasard m'a fait découvrir un dysfonctionnement dans un bout de code écrit par moi (donc sujet à bug car je suis nouveau dans le langage javascript).

    Si je rentre une date inférieur ou égal au 14/06/1940, toLocaleDateString() me donne pour réponse DATE - 1 jour, ???
    let d = new Date($("#datepicker" ).datepicker("getDate"));;
    // si d=14/06/1940, d.toLocaleDateString()=13/06/1940
    // si d=15/06/1940, d.toLocaleDateString()=15/06/1940
    // si d=14/06/1940, d.toLocaleDateString("en-GB")=13/06/1940
    // si d=15/06/1940, d.toLocaleDateString("en-GB")=15/06/1940
    // si d=14/06/1940, d.toLocaleDateString("fr-FR")=13/06/1940
    // si d=15/06/1940, d.toLocaleDateString("fr-FR")=15/06/1940

    Code HTML : 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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    <!doctype html>
    <html lang="fr">
    	<head>
    		<meta charset="utf-8">
    		<title>jQuery UI Sélecteur de date (Datepicker) - calendrier localisée Fr</title>
    		<link rel="stylesheet" href="../bibliotheques local JS CSS/jquery-ui-1.12.1/jquery-ui.min.css">
    		<script src="../bibliotheques local JS CSS/jquery.min.js"></script>
    		<script src="../bibliotheques local JS CSS/jquery-ui-1.12.1/jquery-ui.min.js"></script>
    		<link rel="stylesheet" href="jqueryui/style.css">
    		<!-- <script src="http://jqueryui.com/resources/demos/datepicker/jquery.ui.datepicker-fr.js"></script> -->
     		<!-- http://api.jqueryui.com/datepicker/ -->
     
    		<script>
                    //*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*
                    "use strict"; // force la déclaration des variables
                    window.onload = loadon;
                    //*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
                    function loadon() {
                            for (let i = 1; i < 32; i++) {
                                    let x = document.createElement("OPTION");
                                    x.setAttribute("value", i);
                                    let t = document.createTextNode(i);
                                    x.appendChild(t);
                                    document.getElementById("jour").appendChild(x);
                            }
                            for (let i = 1; i < 13; i++) {
                                    let x = document.createElement("OPTION");
                                    x.setAttribute("value", i);
                                    let t = document.createTextNode(i);
                                    x.appendChild(t);
                                    document.getElementById("mois").appendChild(x);
                            }
                            //let d = new Date()
                            //let max = 2099 - d.getFullYear() + 1;// apparament le maxi est 31/12/2099 étant en 2018 .....
                            let max = 151;
                            //console.log(max);
                            for (let i = 1; i < max; i++) {
                                    let x = document.createElement("OPTION");
                                    x.setAttribute("value", i);
                                    let t = document.createTextNode(i);
                                    x.appendChild(t);
                                    document.getElementById("ans").appendChild(x);
                            }
                            $("#datepicker" ).datepicker("setDate", new Date());
                            $("#datepicker" ).datepicker("show");
                    }//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
                    $(function() {
                            $("#datepicker").datepicker({
                                    yearRange: "1900:2050",         // plage affichable de à
                                    changeMonth: true,                      //Sélecteur de mois accessible
                                    changeYear: true,                       //Sélecteur d'années accessible
                                    altField: "#Result",            //boite d'affichage supplémentaire suivant altFormat
                                    altFormat: "DD d MM yy",
                                    firstDay: 1,                            //Nom du jour débutant la semaine (ici le lundi) 0 à 6 dimanche à samedi
                                    closeText: 'Fermer',
                                    prevText: 'Précédent',
                                    nextText: 'Suivant',
                                    currentText: 'Aujourd\'hui',
                                    monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
                                    monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
                                    dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
                                    dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
                                    dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
                                    weekHeader: 'Sem.',
                                    dateFormat: 'dd/mm/yy'//'yy-mm-dd'
                            });
                    });//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
                    function Calcul(){
                            // calcul date exacte, vérifié pour Dimanche 1 Décembre 1748 et le Dimanche 31 Janvier 2202
                            let d = new Date($("#datepicker" ).datepicker("getDate"));
                            let Jour = d.getDate();         // 1 à 31
                            let Mois = d.getMonth();        // 0 à 11 
                            let An = d.getFullYear();       // (yyyy)
     
                            let NbrJour, NbrMois, NbrAn;
                            if (document.getElementById("Action").value == 'plus'){
                                    //Ajouter
                                    NbrJour = Number($('#jour').val());
                                    NbrMois = Number($('#mois').val());
                                    NbrAn = Number($('#ans').val());
                                    }else{
                                    // Soustraire
                                    NbrJour = Number(-$('#jour').val());
                                    NbrMois = Number(-$('#mois').val());
                                    NbrAn = Number(-$('#ans').val());
                            }
                    // si d=14/06/1940, d.toLocaleDateString()=13/06/1940
                    // si d=15/06/1940, d.toLocaleDateString()=15/06/1940
                    // si d=14/06/1940, d.toLocaleDateString("en-GB")=13/06/1940
                    // si d=15/06/1940, d.toLocaleDateString("en-GB")=15/06/1940
                    // si d=14/06/1940, d.toLocaleDateString("fr-FR")=13/06/1940
                    // si d=15/06/1940, d.toLocaleDateString("fr-FR")=15/06/1940
                            console.log('d=' + d + '    d.toLocaleDateString()=' + d.toLocaleDateString());
                            //console.log('d avant setFullYear = ' + d +  '    d.toLocaleDateString() = ' + d.toLocaleDateString());
                            d.setFullYear(An + NbrAn, Mois + NbrMois, Jour + NbrJour);
                            //console.log('d après setFullYear = ' + d +  '    d.toLocaleDateString() = ' + d.toLocaleDateString());
     
                            $("#d2" ).html("le <font color='blue'>" + d.toLocaleDateString() + "<font color='black'>    soit <font color='blue'>" + DatLng(d));
                    //le 13/06/1940 soit Vendredi 14 Juin 1940
                    //le 15/06/1940 soit   Samedi 15 Juin 1940
                    }//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
                    function DatLng(dat){
                            let d = new Date(dat);
                            let dayNames = $("#datepicker").datepicker("option", "dayNames");
                            let monthNames = $("#datepicker").datepicker("option", "monthNames");
                            return dayNames[d.getDay()] + " " + d.getDate()  + " " + monthNames[d.getMonth()] + " " + d.getFullYear();
                    }//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
     
                    </script>
    	</head>
    	<body>
     
    		<p>Sélectionnez une date:
    			<input type="text" id="datepicker" style="width:65px" onchange="Calcul()">
    			&nbsp;
    			<input type="text" id="Result" size="26">
    		</p>
     
    		<select id="Action" onclick="Calcul()">
    			<option value="plus" selected >Ajouter<option value="moins">Soustraire
    		</select>
    		Jour(s):&nbsp;
    		<select id="jour" onclick="Calcul()" Title="Jour">
    			<option value="0" selected >0
    		</select>
    		Mois:&nbsp;
    		<select id="mois" onclick="Calcul()" Title="mois">
    			<option value="0" selected >0
    		</select>
    		An(s):&nbsp;
    		<select id="ans" onclick="Calcul()" Title="année(s)">
    			<option value="0" selected >0
    		</select>
    		<br><br>Résultat:
    		<h2 id="d2"></h2>
     
    	</body>
    </html>
    A noté que j'utilise des JS externe enregistré en local, cela me permet d'apprendre sans être forcément connecté à internet.

    Mon code peut être essayé https://codepen.io/anon/pen/rpPRyQ?editors=1011

    Je n'ai pas su trouver d'aide à travers mes différentes recherches.
    N'hésitez pas à me corriger aussi quand à la rédaction du code

    Merci.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  2. #2
    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
    le retour de "getDate" est déjà un objet Date donc vous pouvez faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let d = $("#datepicker").datepicker("getDate");
    mais cela ne règle pas du tout ce mystère.

    cela semble venir du datepicker puisque quand on choisis le 14 juin, "getDate" retourne un objet Date "1940-06-13" mais $("#datepicker").prop("value") retourne bien 14/06/1940.

  3. #3
    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 : 73
    Localisation : Belgique

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

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


    Ce n'est pas un exercice trivial, car il faut tenir compte des formats de date imposés par Date() et les différents éléments du DOM.

    Lors des additions ou soustractions, il faut impérativement recalculer une date valide avant de la conserver en mémoire et de l'afficher avec toLocaleString().

    Exemple :

    Code HTML : 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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
    	<!-- cache-control avec max-age=60 pour le développement uniquement -->
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
      <meta name="author" content="Daniel Hagnoul">
    	<title>Test</title>
      <style>
                    *,
                    *:after,
                    *:before {
                            box-sizing: border-box;
                    }
                    
                    /* CSS du test */
                    
                    #calculDate {
                            width: 18rem;
                            height: auto;
                            padding: 0.3rem;
                            border: 1pt dotted grey;
                    }
                    label {
                            display: block;
                            margin: 1rem;
                    }
     
                    /* Fin CSS du test */
     
      </style>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/locale/fr.js"></script>
      <script src="http://danielhagnoul.developpez.com/lib/dvjh/dvjhUtilities-1.4.0.js"></script>
    	<script>
        'use strict';
     
                    document.addEventListener( "DOMContentLoaded", ev => {
                            // le DOM est construit, la page web n'est pas visible
                            moment.locale( "fr" );
                            klog( `DOM ready   : ${ new kDvjhDate() }` );
                            
          // code du test
     
     
                            // fin code du test
          
        }, false );
        
        window.addEventListener( "load", ev => { 
                            // le DOM est construit et la page web est visible
                            klog( `Window load : ${ new kDvjhDate() }` );
                            
          // code du test
                            
                            const
                                    elemPlus = document.querySelector( "#plus" ),
                                    elemMoins = document.querySelector( "#moins" ),
                                    elemDatepicker = document.querySelector( "#datepicker" ),
                                    elemJour = document.querySelector( "#jour" ),
                                    elemMois = document.querySelector( "#mois" ),
                                    elemAn = document.querySelector( "#an" ),
                                    elemResult = document.querySelector( "#result" );
                                    
                            let
                                    dateStr = elemDatepicker.value,
                                    arDate = dateStr.split( "-" ),
                                    an = parseInt( arDate[0], 10 ),
                                    mois = parseInt( arDate[1], 10 ),
                                    jour = parseInt( arDate[2], 10 );
                                    
                            elemResult.value = ( new Date( an, mois - 1, jour ) ).toLocaleString( "fr-be" );
                            
                            elemDatepicker.addEventListener( "change", ev => {
                                    dateStr = ev.target.value;
                                    arDate = dateStr.split( "-" );
                                    
                                    an = parseInt( arDate[0], 10 );
                                    mois = parseInt( arDate[1], 10 );
                                    jour = parseInt( arDate[2], 10 );
                                    
                                    elemResult.value = ( new Date( an, mois - 1, jour ) ).toLocaleString( "fr-be" );
                            }, false );
                            
                            elemPlus.addEventListener( "click", ev => {
                                    an += parseInt( elemAn.value, 10 );
                                    mois += parseInt( elemMois.value, 10 );
                                    jour += parseInt( elemJour.value, 10 );
                                    
                                    // calcul de la date réelle (les additions peuvent donner une date fantaisiste)
                                    let
                                            date = new Date( an, mois - 1, jour );
                                            
                                    an = parseInt( date.getFullYear(), 10 ),
                                    mois = parseInt( date.getMonth(), 10 ) + 1,
                                    jour = parseInt( date.getDate(), 10 );
                                    
                                    elemResult.value = ( new Date( an, mois - 1, jour ) ).toLocaleString( "fr-be" );
                                    
                                    elemDatepicker.value = String( an ) + "-" + 
                                            ( ( mois >= 10 ) ? ( String( mois ) ) : ( "0" + String( mois ) ) ) + "-" +
                                            ( ( jour >= 10 ) ? ( String( jour ) ) : ( "0" + String( jour ) ) );
                                            
                            }, false );
                            
                            elemMoins.addEventListener( "click", ev => {
                                    an -= parseInt( elemAn.value, 10 );
                                    mois -= parseInt( elemMois.value, 10 );
                                    jour -= parseInt( elemJour.value, 10 );
                                    
                                    // calcul de la date réelle (les soustractions peuvent donner une date fantaisiste)
                                    let
                                            date = new Date( an, mois - 1, jour );
                                            
                                    an = parseInt( date.getFullYear(), 10 ),
                                    mois = parseInt( date.getMonth(), 10 ) + 1,
                                    jour = parseInt( date.getDate(), 10 );
                                    
                                    elemResult.value = ( new Date( an, mois - 1, jour ) ).toLocaleString( "fr-be" );
                                    
                                    elemDatepicker.value = String( an ) + "-" + 
                                            ( ( mois >= 10 ) ? ( String( mois ) ) : ( "0" + String( mois ) ) ) + "-" +
                                            ( ( jour >= 10 ) ? ( String( jour ) ) : ( "0" + String( jour ) ) );
                                            
                            }, false );
     
                            // fin code du test
                            
          kIDUnique();
        }, false );
      </script>
    </head>
    <body>
    	<main>
     
    		<div id="calculDate">
    			<label>
    				Selectionnez une date : <input id="datepicker" type="date" value="1940-10-13">
    			</label>
    			<label>
    				Jour(s) : <input id="jour" type="number" min="0"	max="31" value="1" step="1">
    			</label>
    			<label>
    				Mois :<input id="mois" type="number" min="0"	max="12" value="0" step="1">
    			</label>
    			<label>
    				An : <input id="an" type="number" min="0"	max="50" value="0" step="1">
    			</label>
    			<label>
    				<button id="plus">Ajouter</button> <button id="moins">Soustraire</button>
    			</label>
    			<label>
    				Résultat : <output id="result"></output>
    			</label>
    		</div>
     
    	</main>
    </body>
    </html>

    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.)

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Merci à vous deux d'avoir pris le temps de me répondre.

    Ce qui me trouble c'est que le problème n'apparait que pour les dates avant le 15 juin 1940, par contre après cette date tout est Ok.
    Demain je vais de nouveau expérimenter avec vos indications.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    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
    Je crois que j'ai trouvé quelque chose.
    Jusqu'au 15 juin 1940, le fuseau officiel de la France en heure d'été était GMT+1.
    Le 15 juin 1940, les allemands envahissent Paris et change le fuseau horaire en GMT+2.
    https://fr.wikipedia.org/wiki/Heure_...eure_allemande

    D'après les valeurs affichées c'est la bibliothèque DatePicker qui ne gèrent pas cela pour les dates avant le 15 juin.
    Donc quand on choisi par exemple le 5er juin 1940, la date retournée est le 05/06/1940 00:00:00 GMT+2.
    mais toLocaleDateString sait qu'l doit utiliser GMT+1 donc il affiche 04/06/1940 23:00:00 GMT+1.

  6. #6
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Salut

    @danielhagnoul
    En reprenant ton code, il se produit le même phénomène.
    Sur sélection de la date à partir du datepicker
    Nom : BugDate1Bis.jpg
Affichages : 825
Taille : 73,6 Ko
    Ou bien lors du clique sur le bouton Soustraire, la boite du datepicker passe bien à date moins 1 jour, mais la ligne Résultat elle passe à date moins 2 jours, d'ou le risque de confusion.
    Nom : BugDate2Bis.jpg
Affichages : 837
Taille : 73,5 Ko

    @mathieu
    D'après les valeurs affichées c'est la bibliothèque DatePicker qui ne gèrent pas cela pour les dates avant le 15 juin.
    Oui cela semble bien être une possibilité.

    Je me suis aperçu du problème en lisant un livre d'histoire ou un jour de la semaine été donner pour un lundi dans une partie du texte et ...... un dimanche à un autre endroit du même livre pour la même date
    Tout contant de pouvoir vérifier avec MON code , là .... boum.

    Je passe en résolut, car j'ai un 2 autres programmes écrit en 2 langages de programmation différents, qui eux ne bug pas.

    Merci de vous être impliqué pour trouver une réponse à mon petit problème.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 112
    Points
    44 112
    Par défaut
    Bonjour,
    cela montre plusieurs choses,
    • que la gestion des dates/times a toujours été un casse tête ;
    • que lorsque l'on utilise un plugin il faut utiliser les méthodes du plugin et éviter de mélanger les méthodes ;
    • qu'il existe des « bogues » même dans les objets natifs.


    Il existe bien des formats de sortie pour un objet date, voilà ce que l'on obtient si l'on fait un var d = new Date(1940, 5, 13) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Local : 12/06/1940
    JSON  : 1940-06-12T22:00:00.000Z
    Str   :  Thu Jun 13 1940 00:00:00 GMT+0200
    GMT   : Wed, 12 Jun 1940 22:00:00 GMT
    ISO   : 1940-06-12T22:00:00.000Z
    UTC   : Wed, 12 Jun 1940 22:00:00 GMT
    maintenant si avant affichage on ajoute 12 heures le résultat est visiblement correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Local : 13/06/1940
    JSON  : 1940-06-13T10:00:00.000Z
    Str   :  Thu Jun 13 1940 12:00:00 GMT+0200
    GMT   : Thu, 13 Jun 1940 10:00:00 GMT
    ISO   : 1940-06-13T10:00:00.000Z
    UTC   : Thu, 13 Jun 1940 10:00:00 GMT
    Code de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var ms = 3600 *12 *1000;      // 12 heures
    var d = new Date(1940, 5, 13);
    //d.setTime( d.getTime() + ms); // ajout de 12 H
     
    console.log(d);
    console.log('Local :', d.toLocaleDateString());
    console.log('JSON  :', d.toJSON());
    console.log('Str   :', d.toString());
    console.log('GMT   :', d.toGMTString());
    console.log('ISO   :', d.toISOString());
    console.log('UTC   :', d.toUTCString());
    Je pense que mathieu a mis le doigt au bon endroit et cela ne parait pas simple à gérer.

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    (Re)Salut

    Merci NoSmoking de ces nouvelles informations.
    De mon coté, pour le fun, j'ai fait des essais sur un autre ordinateur, avec 4 navigateurs différents, FireFox, Edge, Internet Explorer et Google Chrome.
    Ben le seul à qui cela ne pose pas de problème est Edge.
    Citation Envoyé par NoSmoking
    la gestion des dates/times a toujours été un casse tête
    C'est vrai que pour moi aussi j'ai souvent bagarré depuis que je fait du DEV, le pire étant les langages maison des composants type (BasicStamp, PICBasic ..... et autres) ou le langage était très très limité, sans parler de la mémoire disponible pour les piloter.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Transfert de données suivant date - SQL
    Par yohan0262 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/11/2009, 14h10
  2. Sélection cellule suivant date du jour
    Par etorria dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/04/2008, 15h07
  3. choix d'une cellule suivant date
    Par mickey89 dans le forum Excel
    Réponses: 6
    Dernier message: 27/02/2008, 15h10
  4. [VBA-E]selectionner un mail suivant date de reception
    Par biggione dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2006, 11h18
  5. Ajout d'une colonne automatiquement suivant date
    Par paflolo dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 17h51

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