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 :

Gestion de dates et nombre de jours dans un tableau


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut Gestion de dates et nombre de jours dans un tableau
    Bonjour,

    Pas du tout doué en javascript, je cherche une fonction simple qui permet de calculer pour n lignes le nombre de jours entre la date d’arrivée et la date de départ.

    Date d’arrivée 1 | Date départ 1 | Nbr de jour 1
    Date d’arrivée 2 | Date départ 2 | Nbr de jour 2
    Date d’arrivée 3 | Date départ 3 | Nbr de jour 3
    Date d’arrivée 4 | Date départ 4 | Nbr de jour 4

    J'ai cherché un peu partout sans trouver, merci pour votre aide !
    VrroOOOAAAAAPPPPPPPPPP !!!

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    L’objet Date est capable d’interpréter un certain nombre de formats. Exemple :
    La difficulté dans ton cas sera principalement d’extraire les informations du tableau.

    Une fois que tu as deux objets Date, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var date1 = new Date(cell1.textContent);
    var date2 = new Date(cell2.textContent);
    (je reste volontairement vague sur la façon d’obtenir ces variables cell1 et cell2, références sur tes cellules de tableaux),
    tu peux simplement faire la soustraction entre les deux dates, et tu obtiendras une durée en millisecondes. Divise par 1000 pour avoir des secondes, puis par 60 pour des minutes, etc.
    Si la durée que tu obtiens est négative, c’est que la date d’arrivée est antérieure à la date de départ. Pour ignorer ce cas tu peux comparer à 0 et multiplier par -1 quand nécessaire, ou bien utiliser Math.abs.

    Pour obtenir des références sur tes cellules de tableaux, utilise d’abord une méthode de sélection du DOM (getElementById, querySelector ou autre) pour avoir une référence sur le tableau, puis utilise sa propriété rows, et pour chaque row itère sur la propriété cells de ce dernier.

    En code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var tableau = … ;
    for (var i = 0, nRows = tableau.rows.length; i < nRows; i++) {
      var row = tableau.rows[i];
      for (var j = 0, nCells = row.cells.length; j < nCells; j++) {
        var cell = row.cells[j];
        …
      }
    }
    En bonus, la version ES6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let tableau = … ;
    for (let row of tableau.rows) {
      for (let cell of row.cells) {}
    }
    Voilà l’idée générale, à toi de broder à partir de ça.

    L’autre solution, si tu ne veux pas itérer sur toutes les cellules de chaque ligne, c’est d’ajouter des classes aux cellules qui t’intéressent, et de les sélectionner par leurs classes, au moyen de querySelector ou getElementsByClassName.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Merci pour ta réponse, mais désolé je ne comprends rien, pas assez doué en javascript pour en faire quoi que ce soit...
    Si tu as 5 mn de plus pour écrire quelque chose de plus précis, je t'en serais reconnaissant, ou si tu connais un tuto dispo ?

    Mon tableau est ainsi

    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
    <table id="matable">
          <tr>
            <td class="centrer">Nombre </td>
            <td class="centrer">Date d arrivée</td>
            <td class="centrer">Date de départ</td>
            <td class="centrer">Nbr de jour</td>
            <td class="centrer">Prix par jour</td>
            <td class="centrer">Total €</td>
            <td class="centrer"><a href="#bas" onclick="AddOneRow()">+</a></td>
          </tr>
          <tr>
            <td class="centrer"><input type="text" name="nbchevaux[1]" class="cent0" id="nbchevaux[1]"></td>
            <td class="centrer"><input type="text" name="datearrive[1]" class="cent0" id="datearrive[1]"></td>
            <td class="centrer"><input type="text" name="datedepart[1]" class="cent0" id="datedepart[1]"></td>
            <td class="centrer"><input type="text" name="nbjour[1]" class="cent0" id="nbjour[1]"></td>
            <td class="centrer"><input type="text" name="prix[1]" class="cent0" id="prix[1]"></td>
            <td class="centrer"><input type="text" name="totalchevaux[1]" class="cent0" id="totalchevaux[1]"></td>
            <td class="centrer"><a href="#bas" onclick="AddOneRow()">+</a></td>
          </tr>
      </table>
    VrroOOOAAAAAPPPPPPPPPP !!!

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    Il a bien expliqué.
    Il te faut peut être lire quelques documentation pour JavaScript, on ne peut pas faire tes exercices à ta place, on ne peut que t'orienter.
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Ok donc en fait tu as des input. On va donc utiliser value plutôt que textContent.

    Première remarque : les attributs name et id sont incorrects. La syntaxe crochets est valable pour name à condition que les crochets soient vides :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <inputname="nbchevaux[]">

    Mais ça n’est utile que si ces input sont dans un <form> et si tu utilises ce form pour envoyer des informations au serveur.

    Quant aux id, pas le droit aux caractères spéciaux, tu dois générer une chaîne à partir du numéro de la ligne, par exemple nbchevaux1 ou nbchevaux_1. Tu feras ça dans la fonction AddOneRow, mais on verra ça plus tard.

    Puisque tous tes input sont nommés, on peut accéder à chacun séparément, donc pas besoin d’itérer sur les cellules de la ligne. En revanche, on a toujours besoin d’itérer sur les lignes. Tu auras donc une boucle for comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var matable = document.querySelector('#matable');
    for (var i = 0, nRows = matable.rows.length; i < nRows; i++) {
      var row = matable.rows[i];
      …
    }
    (Par souci de cohérence je vais utiliser querySelector partout.)

    Ensuite tu récupères des références sur les input à manipuler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var inputArrivee = row.querySelector('input[name="datearrive[]"]');
    var inputDepart  = row.querySelector('input[name="datedepart[]"]');
    var inputNbjour  = row.querySelector('input[name="nbjour[]"]');
    Ou alors, utilise les id une fois que tu les auras corrigés.

    Et enfin tu manipules le contenu de ces input avec leur attribut value.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var dateArrivee = new Date(inputArrivee.value);
    …
    inputNbjour.value = … ;
    Pour le reste, réfère-toi à ce que je t’ai dit dans mon précédent post
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Mais ça n’est utile que si ces input sont dans un <form> et si tu utilises ce form pour envoyer des informations au serveur.
    Ben oui, c'est la cas d'autant que si tu regardes la tables il est possible d'ajouter une ligne et des input servent à envoyer des données...

    Mais tout ton code m'aide plus !
    Je vais essayer, si je trouve la solution je viendrais la mettre ici !!
    Merci pour ton aide !

    Une question, vu qu'il faut que je laisse les crochets, ça marche quand même ?
    VrroOOOAAAAAPPPPPPPPPP !!!

  7. #7
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je viens de faire des tests, effectivement on peut mettre des chiffres entre les crochets. J’ai appris un truc grâce à toi, merci
    Par contre faut faire attention à ne pas écraser des valeurs accidentellement.
    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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title>Input names avec des chiffres entre les crochets</title>
    </head>
    <body>
     
    <form>
      <p>
        Test A&nbsp;:
        <input name="testA[1]" value="poney">
        <input name="testA[3]" value="papillon">
        <input name="testA[]"  value="licorne">
      </p>
      <p>
        Test B&nbsp;:
        <input name="testB[42]" value="pomme">
        <input name="testB[42]" value="banane">
        <input name="testB[42]" value="orange">
      </p>
      <p>
        Test C&nbsp;:
        <input name="testC[]"  value="over">
        <input name="testC[0]" value="nine">
        <input name="testC[]"  value="thousands">
      </p>
      <p>
        <input type="submit">
      </p>
    </form>
     
    <?php var_dump($_GET); ?>
     
    </body>
    </html>
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  8. #8
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    C'est cool, je suis heureux de t'avoir permis de voir ça...
    Avec une petite boucle on récupère les données et hop dans la base !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ($_POST['test1'] as $k => $v) {
      $test1= mysqli_real_escape_string( $mysql ,$_POST['test1'][$k]);
      $test2= mysqli_real_escape_string( $mysql ,$_POST['test2'][$k]);
      $test3= mysqli_real_escape_string( $mysql ,$_POST['test3'][$k]);
      $test4= mysqli_real_escape_string( $mysql ,$_POST['test4'][$k]);
    }
    Bon je n'arrive pas à faire la fonction en javascript... sniff
    VrroOOOAAAAAPPPPPPPPPP !!!

Discussions similaires

  1. [XL-2010] Compter le nombre de jours dans une colonne avec des dates
    Par Ilmarin dans le forum Excel
    Réponses: 10
    Dernier message: 30/11/2015, 14h32
  2. Calculer le nombre de jours dans le mois à partir d'un date range
    Par arnaud036 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/05/2012, 17h00
  3. [PHP 5.3] [Dates] mktime me retourne toujours 31 (nombre de jours dans le mois)
    Par beegees dans le forum Langage
    Réponses: 13
    Dernier message: 24/08/2009, 12h51
  4. Date : Nombre de jour dans le mois
    Par grunk dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2008, 16h48
  5. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 00h01

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