Calcul d'heure

Résolu/Fermé
roberta56 - 2 févr. 2021 à 14:13
 roberta56 - 3 févr. 2021 à 16:55
Bonjour j'aimerais créé un script qui me permette de calculer les différents tiers d'un durée, mais j'ai un problème après minuit au lieu de s'afficher en 01:00 ça s'affiche en 25:00. Je n'arrive pas a l'afficher correctement

Voici mon code

// Chaine horaire en mibutes
String.prototype.toMinutes=function(){return parseInt(this.substr(0,2),10)*60+parseInt(this.substr(3,2),10)}
// Ajout de zéro de complétion
Number.prototype.withLeadingZero=function(){var str=''+this;while(str.length<2) str='0'+str;return str}
// Minutes en chaîne horaire
Number.prototype.toHHMMString=function(){return Math.floor(this/60).withLeadingZero()+':'+(this%60).withLeadingZero();}
 
var heure1="6:00";
var heure2="18:00";
 
var diff=(heure2.toMinutes()-heure1.toMinutes()).toHHMMString();
var tiers= (diff.toMinutes()/3).toHHMMString();

var tiers1= (heure2.toMinutes()).toHHMMString();
var tiers2= (heure2.toMinutes()+ tiers.toMinutes()).toHHMMString();
var tiers3= (heure2.toMinutes()+ tiers.toMinutes()+ tiers.toMinutes()).toHHMMString();

Merci d'avance pour votre aide.

3 réponses

Bonjour,

Pouvez-vous tester ce code

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Heure extends JFrame
{
private int heure,vraiHeure,min,seconde;
private int[] x2={200,209,217,225,233,240,248,254,260,265,270,
274,277,278,279,280,279,278,277,274,270,
265,260,254,248,240,233,225,217,209,200,
192,184,176,168,160,153,147,141,136,130,
127,124,122,121,120,121,122,124,127,130,
136,141,147,153,160,168,176,184,192};
private int[] y2={70,71,72,74,77,80,86,91,97,103,110,
118,126,134,142,150,159,167,175,183,190,
197,204,209,214,220,224,227,228,229,230,
229,228,227,224,220,214,209,204,197,190,
183,175,167,159,150,142,134,126,118,110,
103,97,91,86,80,77,74,72,71};
private int[] Tx2={195,240,270,280,270,240,195,155,125,115,120,150};
private int[] Ty2={70,80,110,155,195,225,240,225,195,155,115,80};
private int[] Hx2={200,207,213,220,225,230,236,240,244,247,248,249,
250,249,248,247,244,236,230,225,213,220,213,207,200,
194,188,181,175,170,165,161,157,154,152,151,150,151,
152,154,157,161,165,170,175,181,188,194};
private int[] Hy2={100,101,102,104,107,111,115,120,125,131,138,144,150,
157,163,170,175,181,186,190,194,197,198,199,200,
199,198,197,194,190,186,181,175,170,163,157,150,144,
138,131,125,120,115,111,107,104,102,101};
private final int x1=200,y1=150;
private boolean quar=true,demi=true,moinquar=true;

public Heure()
{
super("Heure");
setBounds(300,200,400,300);
Container con = getContentPane();
con.setLayout(null);
Date date = new Date();
System.out.println(Hx2.length);
System.out.println(Hy2.length);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
heure = date.getHours();
vraiHeure = heure;
if(heure > 12)
heure=(heure-=12)*4;
min = date.getMinutes();
seconde = date.getSeconds();
if(min >= 15 && min < 30)
{
heure++;
quar = false;
}
if(min >= 30 && min < 45)
{
heure+=2;
quar = false;
demi = false;
}
if(min >= 45)
{
heure+=3;
quar = false;
demi = false;
moinquar = false;
}
System.out.println(vraiHeure+":"+min+" "+seconde);
setVisible(true);
setResizable(false);
second();
}

public void paint(Graphics g)
{
g.clearRect(0,0,400,300);
g.setColor(Color.orange);
g.fillRect(100,50,200,200);
g.setColor(Color.white);
g.fillOval(100,50,200,200);
g.setColor(Color.green);
g.drawLine(x1,y1,x2[min],y2[min]);
g.drawLine(x1,y1,Hx2[heure],Hy2[heure]);
g.setColor(Color.red);
g.drawLine(x1,y1,x2[seconde],y2[seconde]);
g.setColor(Color.blue);
g.drawString("12",Tx2[0],Ty2[0]);
for(int i=1;i < 12;i++)
{
g.drawString(String.valueOf(i),Tx2[i],Ty2[i]);
}
g.setColor(Color.black);
if(seconde<10&&min<10)
g.drawString(vraiHeure+":0"+min+" 0"+seconde,180,270);
if(seconde>=10&&min<10)
g.drawString(vraiHeure+":0"+min+" "+seconde,180,270);
if(seconde<10&&min>=10)
g.drawString(vraiHeure+":"+min+" 0"+seconde,180,270);
if(seconde>=10&&min>=10)
g.drawString(vraiHeure+":"+min+" "+seconde,180,270);
}

private void second()
{
Thread sec = new Thread();
while(true)
{
try
{
sec.sleep(1000);
}catch(Exception err)
{
}
if(seconde==59)
{
seconde = 0;
if(min==59)
{
min = 0;
if(heure==48)
{
heure = 0;
vraiHeure = 0;
}
else
{
heure++;
vraiHeure++;
}
quar=true;
demi=true;
moinquar=true;
}
else
min++;
}
else
seconde++;
if(min >= 15 && min < 30 && quar)
{
heure++;
quar = false;
}
if(min >= 30 && min < 45 && demi)
{
heure++;
demi = false;
}
if(min >= 45 && moinquar)
{
heure++;
moinquar = false;
}
repaint();
}
}

public static void main(String[] args)
{
new Heure();
}
}
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
3 févr. 2021 à 00:37
Bonjour,

Visiblement tu continues à répondre n'importe quoi .....
Ton code .. c'est du JAVA .... la question concerne du JAVASCRIPT !!
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
3 févr. 2021 à 00:59
Bonsoir,

Pour traiter ta question, il faut que tu utilises un objet date.

 function msToTime(duration) {
  var milliseconds = parseInt((duration % 1000) / 100),
    seconds = Math.floor((duration / 1000) % 60),
    minutes = Math.floor((duration / (1000 * 60)) % 60),
    hours = Math.floor((duration / (1000 * 60 * 60)) % 24);

  hours = (hours < 10) ? "0" + hours : hours;
  minutes = (minutes < 10) ? "0" + minutes : minutes;
  seconds = (seconds < 10) ? "0" + seconds : seconds;

  return hours + ":" + minutes + ":" + seconds + "." + milliseconds;
}

  var d1 = new Date();
  d1.setHours(6, 0, 0); // heure1="6:00";
  
   var d2 = new Date();
  d2.setHours(18, 0, 0); // heure2="18:00";
  
  var diff = Math.abs(d2 - d1); // retourne la différence en millisecondes
  console.log(msToTime(diff)); // affiche dans la console la durée en Heures:Minutes:Secondes
  
  var tiers=diff/3;
  console.log(msToTime(tiers)); // affiche dans la console la durée en Heures:Minutes:Secondes
  
  var tiers1 = new Date(d1.getTime() + tiers);
  console.log(tiers1);
  
  var tiers2 =  new Date(tiers1.getTime() + tiers);
  console.log(tiers2);
  
  var tiers3 =  new Date(tiers2.getTime() + tiers);
  console.log(tiers3);
  


NB: Je suis parti du principe que le 6h et le 18h étaient sur la même journée...
Si tu veux faire le calcul entre 18h et 6h le lendemain .. il faut
  var d2 = new Date();
  d2.setDate(d2.getDate() + 1);
  d2.setHours(6, 0, 0); // heure2="6:00"  le lendemain;
  
   var d1 = new Date();
  d1.setHours(18, 0, 0); // heure1="18:00";

0
Merci beaucoup ça fonctionne , et oui c'etait bien pour faire le calcul entre 18h et 6h du lendemain.
0