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 :

Exponentiel négatif sur mobile


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut Exponentiel négatif sur mobile
    Bonjour à tous,
    Je ne sais pas si je suis au bon endroit, merci de me rediriger si nécessaire.
    Je développe une appli hybride en JQM dans celle-ci je doit faire un calcul : ( age-0,13)
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var age = 22 ;   /* Here simplified, in reality the result of date calculation */
    var K4HF = Math.pow(age, -0.13);
    var K4HFB = parseFloat(K4HF);
     
    var test = typeof K4HFB;
    alert(test);
    alert(K4HFB);
    alert (K4HFB.toFixed(2))
    Dans Safari Desktop
    Le premier alert = number
    La seconde = 0.6690907894046102
    La dernière = 0.67

    Exactement ce dont j'ai besoin

    Par contre sur mobile (IOS):
    Fist alert : number
    second : NaN
    third : NaN

    Quelqu'un voit-il comment je pourrait résoudre ça?

    Il semblerait que le problème soit du au fait que l'exponentiel soit négatif car d'autre calculs comme: (105 0,48 et 1960,50) passent sans problème.


    D'avance merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    pas de réponse à ta question pourquoi cela m...e sur IOS mais une simple interrogation, pourquoi faire un parseFloat ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var K4HF = Math.pow(age, -0.13);
    var K4HFB = parseFloat(K4HF);

  3. #3
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Bonjour NoSmoking,
    Juste pour m'assurer que ce n'était pas là que ça coinçait !

    Parfaitement inutile j'en convient !

  4. #4
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Ce qui est encore plus curieux c'est que lorsque je met le code dans jsFiddle (voir ici)
    Tout fonctionne comme il faut !!!! sur Safari desktop comme sur safari IOS
    Grrrrr !
    Est que le serveur peut-être mis en cause? (config)

  5. #5
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Il semblerait que mon problème ne soit pas lié à l'exponentiel mais plutôt au fait que (safari IOS) n'aime pas beaucoup le calcul de mon age et que son résultat ne soit pas considéré comme un nombre.

    je le calcule de la façon suivante:
    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
     
    /*Date du jour (today)*/
        var d = new Date();
        var y = d.getFullYear();
        var m = d.getMonth();
        var j = d.getDate();
    /*Je récupère la date de naissance dans ma db  elle est au format   (01/11/1958) */
    /* et je la décompose */
    /* appel db et compagnie ...  */
    var DateNaiss = row.DateNaiss;
                        var N_date = DateNaiss.split("/"); // Split de la date
                        var JN = N_date[0];            // valeur du jour
                        var MN = N_date[1];            // valeur du mois
                        var AN = N_date[2];           // valeur de l'année 
                        var age = (y - AN);
                        age = MN > m ? parseInt(age - 1) : parseInt(age);
    si j'essaie de l'appliquer et de l'afficher a ce niveau sur SAFARI desktop pas de problème! -> 57
    sur safari de l'Iphone (NaN)

    scrogneugneu ! Deux jours sur ce problème sans trouver d'issue ! HELP !

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Attention à ton type de donnée avant de faire des opérations dessus, var age = (y - AN), y est de type number alors que AN est de type string, le mieux serait quand même de ne faire l’opération que sur des nombres.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var N_date = DateNaiss.split("/"); // Split de la date
    var JN = parseInt(N_date[0], 10);            // valeur du jour
    var MN = parseInt(N_date[1], 10);            // valeur du mois
    var AN = parseInt(N_date[2], 10);           // valeur de l'année

  7. #7
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Merci ! Corrigé, mais ça ne résout pas mon problème ! snif !

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Peut être en remontant à l'origine du problème, à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var d = new Date();
    console.log( d);
    console.log( d.toString());
    // et pour test
    console.log( Date.now());
    que t'annonce la console.

  9. #9
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Dans la console:

    Thu Jun 09 2016 10:37:57 GMT+0200 (CEST)
    Thu Jun 09 2016 10:37:57 GMT+0200 (CEST)
    1465461477201

  10. #10
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Ce qui est déroutant, c'est qu'aucune erreur ne soit levée. Que tout ce passe normalement sur safari desktop.
    Mais que safari sur iPhone ou Ipad il s'obstine a considérer cette valeur comme NaN même si un typeof me répond "number"

    Peut-être que je ne vois plus très clair à force de triturer le tout dans tout les sens.
    Je met ma fonction ici, peut-être qu'un regard neuf y verra une faute grosse comme une maison.

    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
    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
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
     
    function CaloriesAffPage()
    {
        var sqlLireProfil = "SELECT Sexe,Taille,Poids,DateNaiss FROM T_Profil WHERE ID = 1";
        var d = new Date();
        console.log(d);
        console.log(d.toString());
    // et pour test
        console.log(Date.now());
        var y = d.getFullYear();
        var m = d.getMonth();
        var j = d.getDate();
        /* Constantes*/
        var check = "<i class='fa fa-check'></i>";
        var FormuleFemme = "Kcal =[0,963 x Poids<sup>0,48</sup> x Taille<sup>0,50</sup> x Age<sup>-0,13</sup>] x (1000/4,1855)";
        var FormuleHomme = "Kcal =[1,083 x Poids<sup>0,48</sup> x Taille<sup>0,50</sup> x Age<sup>-0,13</sup>] x (1000/4,1855)";
        var K1H = 1.083;
        var K1F = 0.963;
        var ActSed = 1.375;
        var ActAL = 1.56;
        var ActAM = 1.64;
        var ActAI = 1.82;
        var CooAge = -0.13;
        var CooTaille = 0.5;
        var CooPoids = 0.48;
        var manquant = "Manquant";
        /* !Constantes */
        db.transaction(function (tx)
        {
            tx.executeSql(sqlLireProfil, undefined, function (tx, result)
            {
                if (result.rows.length)
                {
                    for (var i = 0; i < result.rows.length; i++)
                    {
                        var row = result.rows.item(i);
                        var Sexe = row.Sexe;
                        var Taille = row.Taille;
                        ProfilPoids = row.Poids; /* ProfilPoids = variable globale */
                        var DateNaiss = row.DateNaiss;
                        var N_date = DateNaiss.split("/"); // Split de la date
                        var JN = parseInt(N_date[0], 10);            // valeur du jour
                        var MN = parseInt(N_date[1], 10);            // valeur du mois
                        var AN = parseInt(N_date[2], 10);           // valeur de l'année
    //                    var age = (y - AN);
                        var age = MN > m ? (y - AN) - 1 : (y - AN);
                        Taille = Taille > 100 ? Taille / 100 : Taille;
                        /********************* Formules ***************************/
     
                        if ((Sexe === "") || (Sexe === undefined) || (DateNaiss === "") || (DateNaiss === undefined) || (Taille === "") || (Taille === undefined) || (ProfilPoids === "") || (ProfilPoids === undefined))
                        {
                            $("#MessCalBasalGood").hide();
                            $("#MessCalBasalBad").show();
                            if (Sexe !== "")
                            {
                                $("#Col_Sexe").text(Sexe);
                                $("#status_Sexe").html(check);
                                $("#status_Sexe").css("color", "green");
                            } else
                            {
                                $("#Col_Sexe").text(manquant);
                                $("#status_Sexe").text("x");
                                $("#status_Sexe").css("color", "red");
                            }
                            if (DateNaiss !== "")
                            {
                                $("#Col_Age").text(age);
                                $("#status_Age").html(check);
                                $("#status_Age").css("color", "green");
                            } else
                            {
                                $("#Col_Age").text(manquant);
                                $("#status_Age").text("x");
                                $("#status_Age").css("color", "red");
                            }
                            if (Taille !== "")
                            {
                                $("#Col_Taille").text(Taille);
                                $("#status_Taille").html(check);
                                $("#status_Taille").css("color", "green");
                            } else
                            {
                                $("#Col_Taille").text(manquant);
                                $("#status_Taille").text("x");
                                $("#status_Taille").css("color", "red");
                            }
                            if (ProfilPoids !== "")
                            {
                                $("#Col_Poids").text(Poids);
                                $("#status_Poids").html(check);
                                $("#status_Poids").css("color", "green");
                            } else
                            {
                                $("#Col_Poids").text(manquant);
                                $("#status_Poids").text("x");
                                $("#status_Poids").css("color", "red");
                            }
                        } else
                        {
                            $("#MessCalBasalBad").hide();
                            $("#MessCalBasalGood").show();
     
                            var K2HF = Math.pow(ProfilPoids, CooPoids);
                            var K3HF = Math.pow(Taille, CooTaille);
                            var K4HF = Math.pow(age, CooAge);
                            var K4HF3 = Math.round(K4HF * 100) / 100;
                            var K2HF2 = Math.round(K2HF * 100) / 100;
     
                            var K4HF2 = parseFloat((K4HF).toFixed(2));
                            alert("K4HF3 = " + typeof K4HF3);
                            var K5HF = (1000 / 4.1855);
                            var K5HF2 = Math.round(K5HF * 100) / 100;
                            var KcalH = ((K1H * K2HF * K3HF * K4HF) * K5HF);
                            var KcalF = ((K1F * K2HF * K3HF * K4HF) * K5HF);
                            var KcalH2 = Math.round(KcalH * 100) / 100;
                            var KcalF2 = Math.round(KcalF * 100) / 100;
                            var NbCalHActSed = KcalH * ActSed;
                            var NBCalHActAL = KcalH * ActAL;
                            var NBCalHActAM = KcalH * ActAM;
                            var NBCalHActAI = KcalH * ActAI;
                            var NbCalFActSed = KcalF * ActSed;
                            var NBCalFActAL = KcalF * ActAL;
                            var NBCalFActAM = KcalF * ActAM;
                            var NBCalFActAI = KcalF * ActAI;
                            var FormResultH = "(" + K1H + " x " + K2HF2 + " x " + K3HF + " x " + K4HF3 + ") x " + K5HF2 + " = <div class='KCalHBasal'> " + KcalH2 + " kcal.</div>";
                            var FormResultF = "(" + K1F + " x " + K2HF2 + " x " + K3HF + " x " + K4HF3 + ") x " + K5HF2 + " = <div class='KCalHBasal'> " + KcalF2 + " kcal.</div>";
                            /**********************************************************/
                            alert("K4HF3 = " + typeof K4HF3);
                            alert("K4HF3 = " + K4HF3);
     
                            if (Sexe === "Homme")
                            {
    //                            $("#test").text(age);
                                $("#PFormuleBlackAl").html(FormuleHomme);
                                $("#PFormuleResult").html(FormResultH);
                                $("#Td_CalPS").html(KcalH2 + " x " + ActSed + " =");
                                $("#Td_ResultPS").html(NbCalHActSed.toFixed(2) + " kcal.");
                                $("#Td_CalAL").html(KcalH2 + " x " + ActAL + " =");
                                $("#Td_ResultAL").html(NBCalHActAL.toFixed(2) + " kcal.");
                                $("#Td_CalAM").html(KcalH2 + " x " + ActAM + " =");
                                $("#Td_ResultAM").html(NBCalHActAM.toFixed(2) + " kcal.");
                                $("#Td_CalAI").html(KcalH2 + " x " + ActAI + " =");
                                $("#Td_ResultAI").html(NBCalHActAI.toFixed(2) + " kcal.");
                            } else
                            {
    //                            $("#test").text(age);
                                $("#PFormuleBlackAl").html(FormuleFemme);
                                $("#PFormuleResult").html(FormResultF);
                                $("#Td_CalPS").html(KcalF2 + " x " + ActSed + " =");
                                $("#Td_ResultPS").html(NbCalFActSed.toFixed(2) + " kcal.");
                                $("#Td_CalAL").html(KcalF2 + " x " + ActAL + " =");
                                $("#Td_ResultAL").html(NBCalFActAL.toFixed(2) + " kcal.");
                                $("#Td_CalAM").html(KcalF2 + " x " + ActAM + " =");
                                $("#Td_ResultAM").html(NBCalFActAM.toFixed(2) + " kcal.");
                                $("#Td_CalAI").html(KcalF2 + " x " + ActAI + " =");
                                $("#Td_ResultAI").html(NBCalFActAI.toFixed(2) + " kcal.");
                            }
                        }
                    }
                } else
                {
                    console.log("Profil inexistant");
                    $("#MessCalBasalGood").hide();
                    $("#MessCalBasalBad").show();
                    $("#Col_Sexe").text(manquant);
                    $("#status_Sexe").text("x");
                    $("#status_Sexe").css("color", "red");
                    $("#Col_Age").text(manquant);
                    $("#status_Age").text("x");
                    $("#status_Age").css("color", "red");
                    $("#Col_Taille").text(manquant);
                    $("#status_Taille").text("x");
                    $("#status_Taille").css("color", "red");
                    $("#Col_Poids").text(manquant);
                    $("#status_Poids").text("x");
                    $("#status_Poids").css("color", "red");
                }
            });
        }, erreur_bd);
        if (ProfilPoids)
        {
            $("#TitreListeActivites").show();
            var sqlLireCalories = "SELECT * FROM T_Calories ORDER BY Type ASC, Description ASC";
            db.transaction(function (tx)
            {
                tx.executeSql(sqlLireCalories, undefined, function (tx, result)
                {
                    $('#CollCalo').html("");
                    var TypePrecedent;
                    var htmlCol = "";
                    if (result.rows.length)
                    {
                        for (var i = 0; i < result.rows.length; i++)
                        {
                            var row = result.rows.item(i);
                            var Id = row.id;
                            var type = row.Type;
                            var Desc = row.Description;
                            switch (true) {
                                case (i === 0):
                                    htmlCol +=
                                            "<div data-role='collapsible' " +
                                            "     data-theme='c' data-mini='true' data-inset='true'" +
                                            "     data-collapsed-icon='carat-d' " +
                                            "     data-expanded-icon ='carat-u' " +
                                            "     data-collapsed=true data-iconpos='right'> " +
                                            "    <h3>" + type + "</h3>" +
                                            "      <ul data-role='listview' " +
                                            "      id='listCa' data-mini='true' " +
                                            "      data-inset='true' data-filter='true'>" +
                                            "        <li><a href='#' id='aLiCal' data-CaloId='" + Id +
                                            "' data-rel='popup'>" + Desc + "</a></li>";
                                    TypePrecedent = type;
                                    break;
                                case ((i > 0) && (type !== TypePrecedent)):
                                    htmlCol +=
                                            "</ul>" +
                                            "</div>" +
                                            "<div data-role='collapsible' " +
                                            "     data-theme='c' data-mini='true' data-inset='true'" +
                                            "data-collapsed-icon='carat-d' " +
                                            "data-expanded-icon ='arrow-u' " +
                                            "data-collapsed=true data-iconpos='right'> " +
                                            "<h3>" + type + "</h3>" +
                                            "<ul data-role='listview' " +
                                            "id='listCa' data-mini='true' " +
                                            "data-inset='true' data-filter='true'>" +
                                            "<li><a href='#' id='aLiCal' data-CaloId='" + Id +
                                            "' data-rel='popup'>" + Desc + "</a></li>";
                                    TypePrecedent = type;
                                    break;
                                default:
                                    htmlCol += "<li><a href='#' id='aLiCal' data-CaloId='" + Id + "'" +
                                            "data-rel='popup'>" + Desc + "</a></li>";
                                    TypePrecedent = type;
                                    break;
                            }
                        }
                    } else
                    {
                        console.log("Table Calories vide");
                    }
                    $(htmlCol).appendTo("#CollCalo");
                    $("#CollCalo").enhanceWithin();
                }, erreur_bd);
            });
        } else
        {
            $("#TitreListeActivites").hide();
        }
        $(":mobile-pagecontainer").pagecontainer("change", "#P_Calories", {transition: "flip"});
    Affichage sur safari desktop :
    Nom : Desktop.png
Affichages : 93
Taille : 30,6 Ko
    sur iPhone
    Nom : Iphone.png
Affichages : 93
Taille : 28,7 Ko

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Si l'on considère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var d = new Date();
    console.log(d);
    et le résultat obtenu Thu Jun 09 2016 10:37:57 GMT+0200 (CEST), il semblerait que le retour de leur constructeur Date soit bogué, tu aurais du avoir en retour un objet Date.

    Comme par ailleurs avec console.log(Date.now()) tu reçois une réponse cohérente, j'essaierais de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var y = new Date().getFullYear();
    var m = new Date().getMonth();
    var j = new Date().getDate();
    sans passer par une variable.

    [EDIT] correction coquilles dans code

  12. #12
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Ca déclenche une erreur : TypeError: undefined is not a constructor (evaluating 'new Date.getFullYear()')

    loops ok vu et corrigé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var y = new Date().getFullYear();
    var m = new Date().getMonth();
    var j = new Date().getDate();
    Mais ça ne résout malheureusement toujours pas mon problème (dis-t'il en s'arrachant sa dernière touffe de cheveux) !

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    pas mal de coquilles.

    Pourrais tu nous dire ce que renvoie la console IOS pour y, m et j pour voir si le problème vient bien du constructeur Date.

    Un autre essai éventuel à faire en forçant un paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var d = new Date( Date.now());
    console.log(d);
    Sinon il reste la possibilité de passer par une bibliothèque tiers comme moment.js si le problème venait bien de là.

    PS : Je corrige mes aneries de saisie

  14. #14
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    IOS donne bien les valeurs attendues (2016) (5) (9) et tout les 3 de type (number) et d= Thu Jun 09 2016 10:37:57 GMT+0200 (CEST)

    par contre le résultat de ma ternaire : var age = MN > m ? (y - AN) - 1 : (y - AN);
    ne passe pas et donne NaN sur IOS
    l'age sur desktop.

    Même en forçant un peu son type par : var fromage = Math.round(age * 100) / 100;

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Si je récapitule sous IOS
    ne renvoie pas un objet Date mais une string comme si l'on faisait un simple
    par contre le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var y = new Date().getFullYear();
    var m = new Date().getMonth();
    var j = new Date().getDate();
    renvoient bien des valeurs de type number.

    Nota au passage les moins commencent à 0, ce qui pourrait fausser ton calcul de l'age.

    Tu as identifié que var age = MN > m ? (y - AN) - 1 : (y - AN) te retourne un superbe NaN et là je ne voie pas pourquoi, attendu que toutes les variables sont de type number !

    Ce que je peux te proposer c'est d'essayer ce simple code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //
    var y = new Date().getFullYear();
    var m = new Date().getMonth() +1;
    var j = new Date().getDate();
    //
    var N_date = '01/11/1958'.split("/"); // Split de la date
    var JN = parseInt(N_date[0], 10);            // valeur du jour
    var MN = parseInt(N_date[1], 10);            // valeur du mois
    var AN = parseInt(N_date[2], 10);           // valeur de l'année
     
    var age = MN > m ? (y - AN) - 1 : (y - AN);
    console.log( age);
    PS : Navré pas les moyens de tester.

  16. #16
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Rien à faire, il semblerait que se soit bien un bug safari mobile.

    je recherche un moyen de contourner le problème, peut-être en me basant sur Date.now(). puisque sa valeur semble correcte.
    le tout sera de transformer ma DateNaiss au même format afin de pouvoir la soustraire et de transformer le résultat en années.

    et contourner le fait que méthode now() renvoie le nombre de millisecondes écoulées depuis le 1er Janvier 1970 00:00:00 UTC

  17. #17
    Membre éclairé Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Par défaut
    Problème résolu en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var birth = new Date(DateNaiss);
    var check = new Date();
    var milliDay = 1000 * 60 * 60 * 24; // a day in milliseconds;
    var ageInDays = (check - birth) / milliDay;
    var ageInYears = Math.floor(ageInDays / 365);
    var age = ageInDays / 365;

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Certes la solution est « acceptable », seulement ce que je ne comprends pas c'est qu'il semblerait que new Date() fonctionne bien, contrairement à ce que l'on pensait, puisque tu utilises dans ton code var check = new Date().

    Il serait quand même intéressant de connaitre la source de ce NaN, peut être l'opérateur (ternaire) conditionnel.

    Il serait peut être intéressant de faire ce simple test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var age = y - AN;
    console.log( age);
    if( MN > m){
      age--;
    }
    console.log( age);

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

Discussions similaires

  1. Calcul exponentiel sur mobile
    Par Goltar dans le forum Développement iOS
    Réponses: 0
    Dernier message: 06/06/2016, 11h16
  2. Graphisme pour un jeux java sur mobile
    Par marocleverness dans le forum Java ME
    Réponses: 4
    Dernier message: 15/03/2007, 15h53
  3. 3D sur mobile avec j2me
    Par chabfive dans le forum API graphiques
    Réponses: 1
    Dernier message: 10/11/2006, 09h28
  4. [FLASH 8] Application sur mobile
    Par dom_dev dans le forum EDI/Outils
    Réponses: 7
    Dernier message: 07/09/2006, 11h02
  5. creation d'une appli bluetooth stereo sur mobile
    Par diaboli-k dans le forum Java ME
    Réponses: 1
    Dernier message: 01/08/2006, 11h47

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