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 :

Calculer la durée d'un pourcentage


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut Calculer la durée d'un pourcentage
    Bonjour,
    j'ai une petite question, j'aimerais calculer pourcentage entre une date début et une date fin et la date actuel.
    Pour cela je fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    date_actuel = new Date(2016, 01, 01, 6, 57, 36),
    date_ajout = new Date(2016, 01, 01, 00, 00, 00),
    date_sortie = new Date(2016, 02, 01, 00, 00, 00);
    var pourcentage = Math.round((( date_actuel - date_ajout ) / ( date_sortie - date_ajout ) * 100)*10000000)/10000000;
    var reste = Math.round((100 - pourcentage)*10000000)/10000000;
    $("#test_1").html(pourcentage + " " + reste);
     
    date_actuel = new Date(2016, 01, 15, 12, 00, 00),
    date_ajout = new Date(2016, 01, 01, 00, 00, 00),
    date_sortie = new Date(2016, 02, 01, 00, 00, 00);
    var pourcentage = Math.round((( date_actuel - date_ajout ) / ( date_sortie - date_ajout ) * 100)*10000000)/10000000;
    var reste = Math.round((100 - pourcentage)*10000000)/10000000;
    $("#test_2").html(pourcentage + " " + reste);
    Mon but c'est d'afficher la durée qu'il faut attendre pour atteindre 1% ou 2% ou même 50%, car sur une grosse durée le pourcentage avance que très peut.
    J'ai trouvé que pour mon exemple pour avoir 1% tout rond il faut attendre 06:57:36 et que si on double ou sait qu'il faut attendre 13:55:12 pour arriver à 2% et pour 50% il faut attendre le 15 à 12h.

    Mais comment on peut calculer ça ? En PHP, je pourrais faire un truck fous: j'ai une fonction mais me calcul les différences sur les dates et qui peut ajouter ou enlever une durée.
    Je pourrais donc faire une boucle qui ajoute des secondes à ma date et dès que je trouve 1%, je regarde la différence ajouté.
    Mais ça à l'air bien compliqué surtout si on fait ça a chaque chargement^^.

    EDIT:
    j'ai réfléchis et j'ai trouvé comment le faire en PHP hyper simplement.
    Je calcul la différence entre mes deux dates et je récup le nombre de seconde que je divise par deux par exemple et que j'ajoute a ma date de départ ce qui va me dire quand je vais atteindre les 50%!!!

  2. #2
    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 : 74
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Je vois que c'est résolu, mais pour le fun, la solution en ES2015 :

    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
    let
      pourcentage = ( dc, dj, ds ) => Math.round( ( ( dc - dj ) / ( ds - dj ) * 100 ) * 10000000 ) / 10000000,
      reste = p => Math.round( ( 100 - p ) * 10000000 ) / 10000000,
      date_ajout = new Date( 2016, 1, 1, 0, 0, 0 ),
      date_sortie = new Date( 2016, 2, 1, 0, 0, 0 ),
      date_actuel = new Date( 2016, 1, 1, 6, 57, 36 );
     
    console.log( `date_ajout : ${ date_ajout.toLocaleString() } ;
      date_sortie = ${ date_sortie.toLocaleString() } ;
      date_actuel : ${ date_actuel.toLocaleString() }`
    );
     
    let 
      p = pourcentage( date_actuel, date_ajout, date_sortie ),
      r = reste( p );
     
    console.log( `pourcentage = ${p} %, reste = ${r} %` );
     
    date_actuel = new Date( 2016, 1, 15, 12, 0, 0);
     
    console.log( `date_ajout : ${ date_ajout.toLocaleString() } ;
      date_sortie = ${ date_sortie.toLocaleString() } ;
      date_actuel : ${ date_actuel.toLocaleString() }`
    );
     
    p = pourcentage( date_actuel, date_ajout, date_sortie );
    r = reste( p );
     
    console.log( `pourcentage = ${p} %, reste = ${r} %` );
     
    let
      ds = date_sortie - 0,
      dj = date_ajout - 0,
      dc = p => new Date( dj + ( p * ( ds - dj ) / 100 ) ).toLocaleString();
     
    console.log( `1 % => date actuelle = ${ dc(1) }` );
    console.log( `50 % => date actuelle = ${ dc(50) }` );
    console.log( `25 % => date actuelle = ${ dc(25) }` );
    console.log( `75 % => date actuelle = ${ dc(75) }` );
     
    /*
    date_ajout : 1/2/2016 00:00:00 ;
      date_sortie = 1/3/2016 00:00:00 ;
      date_actuel : 1/2/2016 06:57:36
    pourcentage = 1 %, reste = 99 %
     
    date_ajout : 1/2/2016 00:00:00 ;
      date_sortie = 1/3/2016 00:00:00 ;
      date_actuel : 15/2/2016 12:00:00
    pourcentage = 50 %, reste = 50 %
     
    1 % => date actuelle = 1/2/2016 06:57:36
    50 % => date actuelle = 15/2/2016 12:00:00
    25 % => date actuelle = 8/2/2016 06:00:00
    75 % => date actuelle = 22/2/2016 18:00:00
    */
    Pour "traduire" en ES5, il suffit d'utiliser Babel : http://babeljs.io/repl/.

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

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/12/2006, 17h43
  2. [MySQL] Aide pour calculer une durée
    Par Sandara dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/06/2006, 17h00
  3. Calculer la duree d'un MP3
    Par k-koo dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 21h01
  4. [Date] Fonction de calcul de durée entre 2 dates
    Par jesus144 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/01/2006, 16h36
  5. Calculer une duree entre 2 dates
    Par d.w.d dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 22h39

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