Aide en Javascript SVP

Fermé
Lepetitprince78 Messages postés 248 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 2 février 2016 - 30 janv. 2016 à 16:10
Lepetitprince78 Messages postés 248 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 2 février 2016 - 2 févr. 2016 à 01:15
Bonjour,

Je débute en Javascript et j'ai besoin de votre aide svp

En fait je souhaite créer une page html avec un code javasript pour additionner des heures, des minutes et des secondes dans le cadre d'un projet pour un club athlétisme et faire des additions de temps de course pour obtenir des moyennes ensuite.

Pouvez-vous m'aider?

Existe-t-il un code javascript "prêt à l'emploi" pour faire ça et où puis-je le trouver?

Merci pour vos conseils, je ne me vois pas coder ça tout seul :)




3 réponses

Bonjour,

un script prêt à l'emploi.
ça ne veux rien dire puisque javascript s'appuie essentiellement sur la manipulation de la page HTML, donc comme la plupart des scripts est particulier à une page, à ce qu'on veut faire...

Toutefois javascript est fortement typé objet(il n'est pas à proprement parler un langage objet comme peuvent l'être certains langage compilés) et posséde tout un tas d'objet.

Un objet est grosso modo une regroupement de fonctions dans un but donné.

Il existe pléthore d'objets(sans parler des API), l'objet date par exemple pour ce que vous voulez faire.

http://www.w3schools.com/jsref/jsref_obj_date.asp

permet de manipuler des dates. Si vous voulez creuser il y a une habitude en développement assez pratique qui est de transformer une date en une valeur numérique décimale, le timestamp linux:

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Date/now

Il permet de se détacher de la base 60 pour calculer en décimal mais ce n'est qu'une solution pratique et parfois pas nécessaire.

Sinon pour le reste il faut maîtriser les formulaires HTML(pour entrer les durées), l’arithmétique basique(addition, soustraction, division pour obtenir des différences de temps et une moyenne) ainsi que l'affichage dans la page.

Si vous débutez et avez assez de connaissances pour vous pouvez commencer par la gestion de deux nombres que vous additionnez pour obtenir une moyenne puis vous rapprocher du modèle nécessaire de votre programme(en changeant la valeur numérique par une durée, en ajoutant autant de valeurs que vous voulez pour obtenir la moyenne-du coup utilisation de variables sous forme de tableaux la longueur du tableau exprimant le diviseur pour obtenir la moyenne).

En outre javascript est uniquement local au client(l'ordinateur de l'utilisateur par opposition a serveur) et donc il faudra une base de données et son programme de gestion pour pouvoir enregistrer ses valeurs. Là ça sera PHP et MySQL même si le programme javascript vous pouvez le conserver.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
1 févr. 2016 à 15:27
0
Lepetitprince78 Messages postés 248 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 2 février 2016 9
2 févr. 2016 à 01:15
Bonjour

Oui merci pour vos réponses.

C'est exactement ce que je demandais en faite, est-ce que dans une librairie Javascript je peut trouver les codes qu'il me faut? Je veux additionner heures, minutes, secondes (et non des dates) pour des courses d'endurance comme de vitesse mais je suis pas une "lumière" en maths^^

J'ai trouvé ces quelques codes dont je pourrai m'inspirer peut être, qu'en pensez-vous?

var checkZip = function(zip)
{
zip = zip.replace(/^\s+|\s+$/, '');
if ( zip.length < 5 )
{
alert("Please enter a valid zip code.");
return "";
}
zip = zip.substring(0,5);
if (zip != zip.match(/^[0-9]+$/))
{
alert("Please enter a valid zip code.");
return "";
}
return zip;
};


var autoClicked = function()
{
var zip = document.getElementById("txtZip").value;

zip = checkZip(zip);
if ( zip != "" )
{
var f = document.getElementById("nextInsure");
f.zipcode.value = zip;
f.which.value = 1;
f.submit();
}
};

keyDownZip = function(e)
{
var code;
if (document.all) {
code = window.event.keyCode;
}
else {
code = e.which;
}
if ( code == 13 ) {
autoClicked();
}
};

//holds dollar times global functions
DT_F = function() {};

//holds global variables
DT_V = function() {};

String.prototype.DT_trim = function() {
return this.replace(/^\s+|\s+$/g,"");
};

DT_F.getFormFloat = function(el, unsetErr, nanError)
{
var sVal = document.getElementById(el).value;
sVal = sVal.DT_trim();
if ( sVal.length === 0 ) {
throw unsetErr;
}
sVal = DT_F.fixNumber(sVal);
fVal = parseFloat(sVal);
if ( isNaN(fVal) ) {
throw nanError;
}
return fVal;
};

DT_F.getFormInt = function(el, unsetErr, nanError, roundMessage)
{
var sVal = document.getElementById(el).value;
sVal = sVal.DT_trim();
if ( sVal.length === 0 ) {
throw unsetErr;
}
sVal = DT_F.fixNumber(sVal);
fVal = parseFloat(sVal);
if ( isNaN(fVal) ) {
throw nanError;
}
iVal = Math.round(fVal);
if ( iVal != fVal ) {
alert(roundMessage + " " + iVal);
}
return iVal;
};


DT_F.fixNumber = function(sVal)
{
sVal = sVal.replace(/\$/g, "");
sVal = sVal.replace(/\%/g, "");
sVal = sVal.replace(/,/g, "");
return sVal;
};


DT_F.addCommas = function(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
};

DT_F.round = function(n, dec)
{
var s = n.toFixed(dec);
return parseFloat(s);
};


DT_F.formatDollarsCents = function(x)
{
y = DT_F.addCommas( Math.abs(x).toFixed(2) );
if ( x < 0 ) {
return "-$" + y;
} else {
return "$" + y;
}
};

DT_F.formatDollars = function(x)
{
x = Math.round(x);
y = DT_F.addCommas( Math.abs(x) );
if ( x < 0 ) {
return "-$" + y;
} else {
return "$" + y;
}
};


DT_F.calcPayment = function(loan, months, rate)
{
var mRate = rate / 1200;
var payment;

// interest only
if ( months == -1 ) {
return loan * mRate;
}

if ( rate === 0 )
{
payment = loan / months;
}
else
{
var factor = Math.pow(1 + mRate, months );
payment = loan * ( mRate / (1 - 1/factor) );
}
return payment;
};

DT_F.setDateElements = function(dEl, mEl, yEl, d)
{
document.getElementById(dEl).value = d.getDate();
document.getElementById(mEl).value = d.getMonth();
document.getElementById(yEl).value = d.getFullYear();
};

DT_F.isLeapYear = function(y)
{
if( y % 4 === 0) {
if( y % 100 === 0) {
if ( y % 400 === 0) {
return true;
}
return false;
}
return true;
}
return false;
};

DT_F.getDaysInMonth = function(m, y)
{
switch (m)
{
case 0: return 31;
case 1:
if ( DT_F.isLeapYear(y) ) {
return 29;
}
return 28;
case 2: return 31;
case 3: return 30;
case 4: return 31;
case 5: return 30;
case 6: return 31;
case 7: return 31;
case 8: return 30;
case 9: return 31;
case 10: return 30;
case 11: return 31;
}
return -1;
};

// 1 = d1 later
// -1 = d2 later
// 0 = same
DT_F.dateLater = function(d1, d2)
{
if ( d1.getFullYear() > d2.getFullYear() ) {
return 1;
}
if ( d1.getFullYear() < d2.getFullYear() ) {
return -1;
}
if ( d1.getMonth() > d2.getMonth() ) {
return 1;
}
if ( d1.getMonth() < d2.getMonth() ) {
return -1;
}
if ( d1.getDate() > d2.getDate() ) {
return 1;
}
if ( d1.getDate() < d2.getDate() ) {
return -1;
}
return 0;
};

// Returns the difference in years between d1 and d2, where d2 is later than d1
DT_F.getYearDifference = function(d1,d2)
{
var y = d2.getFullYear();
var m = d1.getMonth();
var d = d1.getDate();

if ( DT_F.dateLater(new Date(y,m,d), d2) == 1 ) {
y--;
}

var yd = y - d1.getFullYear();
var dd = 0;
var ld = 0;

while ( DT_F.dateLater(new Date(y,m,d), d2) == -1 )
{
if ( DT_F.isLeapYear(y) ) {
ld++;
}
d++;
dd++;
if ( d > DT_F.getDaysInMonth(m,y) ) {
d=1;
m++;
if ( m > 11 ) {
m = 0;
y++;
}
}

}
var diy = 365 + ld/366;
return yd + dd/diy;
};

DT_F.getTotalSeconds = function(s, ap)
{
var hours, minutes, seconds = 0;

tabs = s.split(":");
if ( tabs.length != 2 && tabs.length != 3) {
throw("Time must be in format hh:mm or hh:mm:ss.");
}

hours = parseInt( tabs[0],10 );
if ( isNaN(hours) ) {
throw("Invalid hour: " + tabs[0] );
}
if ( hours < 1 || hours > 12 ) {
throw("Invalid hours, must be between 1-12.");
}
if ( hours == 12 ) {
hours = 0;
}

minutes = parseInt( tabs[1],10 );
if ( isNaN(minutes) ) {
throw("Invalid minutes: " + tabs[1] );
}
if ( minutes < 0 || minutes > 59 ) {
throw("Invalid minutes, must be between 0-59.");
}
if ( tabs.length == 3 )
{
seconds = parseInt( tabs[2],10 );
if ( isNaN(seconds) ) {
throw("Invalid seconds: " + tabs[2] );
}
if ( seconds < 0 || seconds > 59 ) {
throw("Invalid seconds, must be between 0-59.");
}
}

if ( ap != "AM" && ap != "PM" ) {
throw("Invalid AM/PM value.");
}

if ( ap == "PM" ) {
hours += 12;
}


var total = hours * 3600 + minutes * 60 + seconds;
return total;
};

DT_F.getTimeString = function(t, useAp)
{
var hours = Math.floor(t/3600);
t -= hours * 3600;
var minutes = Math.floor(t/60);
t -= minutes * 60;
seconds = t;

var postFix = "";
if ( useAp )
{
if ( hours >= 12 ) {
hours -= 12;
postFix = "pm";
}
else {
postFix = "am";
}
if ( hours === 0 ) {
hours = 12;
}
}

var x = hours + ":";
if ( minutes < 10 ) {
x += "0";
}
x += minutes + ":";
if ( seconds < 10 ) {
x += "0";
}
x += seconds;
x += postFix;

return x;
};




ou

var dt_hours_tRows = 1; //total
var dt_hours_vRows = 1; //visible

dt_hours_clearValues = function() {
for (var i=1; i<=dt_hours_tRows; i++ ) {
document.getElementById("dt_hours_h" + i).value = "";
document.getElementById("dt_hours_m" + i).value = "";
document.getElementById("dt_hours_s" + i).value = "";
}
};

dt_hours_addRow = function()
{
if ( dt_hours_tRows == dt_hours_vRows )
{
dt_hours_tRows++;
dt_hours_vRows++;

var row = document.createElement('div');
row.id = "dt_hours_r" + dt_hours_tRows;
row.innerHTML = "<div class='x'><input type='text' id='dt_hours_h" + dt_hours_tRows + "'></div><div class='x'><input type='text' id='dt_hours_m" + dt_hours_tRows + "'></div><div class='x'><input type='text' id='dt_hours_s" + dt_hours_tRows + "'></div>";
row.className = "row datarow";
document.getElementById("dt_hours_moreRows").appendChild ( row );
return;
}
dt_hours_vRows++;
document.getElementById("dt_hours_r" + dt_hours_vRows).style.display = "block";
};

dt_hours_removeRow = function()
{
if ( dt_hours_vRows == 1 ) {
alert("Can't remove the first row");
return;
}
document.getElementById("dt_hours_r" + dt_hours_vRows).style.display = "none";
dt_hours_vRows--;
};

dt_hours_getFormVal = function( el, err )
{
var sVal = document.getElementById(el).value;
sVal = sVal.DT_trim();
if ( sVal.length == 0 ) {
return 0;
}
sVal = DT_F.fixNumber(sVal);
fVal = parseFloat(sVal);
if ( isNaN(fVal) ) {
throw err;
}
return fVal;
};

dt_hours_calculate = function()
{
var html = [];

var totalTime = 0;
var h, m, s, d;
for ( var i=1; i<=dt_hours_vRows; i++ )
{
try
{
h = dt_hours_getFormVal( "dt_hours_h" + i, "Please enter a valid number of hours" );
m = dt_hours_getFormVal( "dt_hours_m" + i, "Please enter a valid number of minutes" );
s = dt_hours_getFormVal( "dt_hours_s" + i, "Please enter a valid number of seconds" );
}
catch ( ex )
{
alert( "Error on row " + i + ": " + ex );
}

var sum = h*3600 + m*60 + s;
totalTime += sum;
}

if ( totalTime < 0 ) {
s = totalTime * -1;
}
else {
s = totalTime;
}

h = Math.floor(s/3600);
s -= h*3600;
m = Math.floor(s/60);
s -= m*60;

if ( totalTime < 0 )
{
h = h*-1;
m = m*-1;
s = s*-1;
}

html.push("The total time is equal to the following: ");
html.push("<ul>");

var z = "";
if ( h != 0 ) {
z += h + " hours, ";
}
if ( m != 0 ) {
z += m + " minutes, ";
}
z += DT_F.round(s,4) + " seconds";

html.push("<li><b>" + z + "</b></li>");
html.push("<li>" + DT_F.addCommas( DT_F.round(totalTime,4) ) + " seconds</li>");
minutes = totalTime / 60;
html.push("<li>" + DT_F.addCommas( DT_F.round(minutes,4) ) + " minutes</li>");
hours = totalTime / 3600;
html.push("<li>" + DT_F.addCommas( DT_F.round(hours,4) ) + " hours</li>");
html.push("</ul>");

html.push("<div class=\"note\">(All results rounded to the nearest 0.0001)</div>");

var x = document.getElementById("dt_hours_results");
x.innerHTML = html.join('');
x.style.display = "block";
};


Merci
0