2011-04-15 8 views
0

Je suis sur un calcul de temps pour calculer un temps de retard pour un train Calendrier: t1 Heure d'arrivée: t2temps Calcul

function tomdiff(t1,t2) { 
    var t1 = hour2mins(t1); var t2=hour2mins(t2); 
    var ret = mins2hour(parseInt(t2-t1)); 
    if(t2<t1) {ret=mins2hour(parseInt(parseInt(t2+1440)-t1));} 
    return ret; 
} 

//Calculate on Key up 
    $("input.[rel=time1]").keyup(function (b){ $("#delaytime").val(tomdiff($("#schedule").val(),$("#arrival").val())); }); 

Cela fonctionne très bien, mais si le train arrive plus tôt!

Quelqu'un peut-il me conseiller?

Répondre

0

Le problème fondamental est que vous essayez de gérer l'emballage à minuit (le nombre magique 1440 minutes est de 24 heures) avec des informations insuffisantes.

Si t1 et t2 sont Date cas, le code ne doit pas faire tout ce qui déblayage environ avec des heures et des minutes, et ne pas avoir à vous soucier de minuit:

function tomdiff(t1, t2) { 
    var msdiff; 

    msdiff = t2 - t1; // When you perform arithmetic on dates, their 
         // underlying EpochMS value (milliseconds since 
         // Jan 1, 1970) is used 
    return msdiff/1000/60; // Milliseconds => minutes 
} 

Si t1 et t2 ne sont pas Date instances, ils devraient être. :-) Probablement vous avez la date ainsi que l'heure de l'arrivée prévue et réelle du train. Le constructeur Date vous permet de nourrir ceux:

new Date(year, month, day [, hour, minute, second, millisecond ]) 

Si vous vous trouvez avoir besoin de faire beaucoup avec des calculs de date/heure (et l'analyse syntaxique et l'affichage), je regarde DateJS.

+0

Eh bien, j'ai un champ de date (#jLdate) qui est le lien vers la date d'arrivée! – user505790

+0

@user: Si vous avez la date et l'heure dans un certain format (même s'il s'agit d'un texte), vous devriez pouvoir convertir cela en une instance 'Date' avec laquelle vous pouvez faire l'arithmétique date/heure. (Encore une fois, peut-être avec l'aide de DateJD.) –

+0

merci beaucoup pour la datejs. – user505790

0

Je ne peux pas être compréhension correctement à la question, mais si vous calculez le retard de train et il n'est pas retardé alors le retard est 0.

Non?

Edit:

comme je l'aide Date.js mentionné ci-dessous, vous pouvez faire des choses funky comme ..

Date.parse('now - 10 hours'); 
Date.parse('15-04-2011').add(-1).day() 

Si vous utilisez DateJs juste être conscient de la culture/localisation

<!-- Set the CultureInfo to de-DE (German/Deutsch) --> 
<script type="text/javascript" src="date-de-DE.js"></script> 
+0

oui mais si j'ai t1 = 12:00 et t2 = 11:50 am obtenir 23:50 – user505790

+0

Ensuite, c'est un problème avec la façon dont vous calculez la différence. Vous n'avez pas listé les fonctions que vous utilisez, mais je suppose que vous ne prenez pas en compte la date? – Dve

+0

Vous pouvez regarder quelque chose essayé et testé comme http://www.datejs.com/ pour faire le calcul – Dve

0

Il semble que vous ayez besoin d'ajouter un champ de date. Donc, vous allez vérifier la date du t1 et t2 avant de calculer la date. Ou probablement les convertir en horodatage unix et faire des calculs dessus (après avoir ajouté la date bien sûr).