2011-09-01 2 views
0

J'utilise ce code jQuery pour afficher la gauche à gauche jusqu'à 10h localement.Jquery Minuterie quotidienne

Entre 10h00 et 14h00, il supprime certaines images.

Ensuite, après 14h00, il devrait afficher l'heure jusqu'à 10 heures. Il ajoute également un décalage à compte pour les week-ends.

Il fonctionne avec brio la plupart du temps, mais il semble après 14h00, il va bien au fil du temps ...

Quelqu'un peut-il voir pourquoi cela échoue, je l'ai regardé pour longtemps à ... maintenant je suis juste confus! S'il vous plaît aider!

$(document).ready(function() { 
// 24 hour based 
var targetTime = 1000; 
var targetHour = 10; 
var openingTime = 1400; 
var openingHour = 14; 

var currentTime = new Date(); 

// sun 0 mon 1 ... fri 5 sat 6 
var currentDay = currentTime.getDay(); 

var offset = 24; 
// friday 
if (currentDay === 5) { 
    offset = 60; 
} // saturday 
else if (currentDay === 6) { 
    offset = 48; 
} 

var the_current_time = ''+ currentTime.getHours() + '' + currentTime.getMinutes() + ''; 



if(the_current_time > targetTime && the_current_time < openingTime) { 

    var time_hours = (openingHour + offset) - currentTime.getHours() - 1; 
    var time_min = 60 - currentTime.getMinutes(); 
    var time_seconds = 60 - currentTime.getSeconds(); 

    $('#hours_left').append(time_hours, ':',time_min < 10 ? "0" : "" , time_min , ':' , time_seconds < 10 ? "0" : "" , time_seconds); 
    $('#watch_image').attr('src','http://cdn.shopify.com/s/files/1/0085/1702/t/1/assets/closed-until-icon.png'); 
    $('#time-left-banner').css('width','275px'); 
    $('.add-to-button').css('display','none'); 
    $('#purchase').css('display','none'); 


} 
else if(the_current_time > targetTime && the_current_time > openingTime) { 

    var time_hours = (targetHour + offset) - currentTime.getHours() - 1; 
    var time_min = 60 - currentTime.getMinutes(); 
    var time_seconds = 60 - currentTime.getSeconds(); 

    $('#hours_left').append(time_hours, ':',time_min < 10 ? "0" : "" , time_min , ':' , time_seconds < 10 ? "0" : "" , time_seconds); 

} 

else { 
var time_hours = (targetHour + offset) - currentTime.getHours() - 1; 
var time_min = 60 - currentTime.getMinutes(); 
var time_seconds = 60 - currentTime.getSeconds(); 

$('#hours_left').append(time_hours, ':',time_min < 10 ? "0" : "" , time_min , ':' , time_seconds < 10 ? "0" : "" , time_seconds); 
} 

});

Répondre

2

D'abord, je simplifierais un peu le code. Les trois calculs var dans les trois branches semblent être les mêmes. Ainsi est la mise à jour de #hours_left. Vous devriez être en mesure de les factoriser sur le if. Cela permettra également de réduire le nombre de branches si de 3 à 1 - si je ne manque pas quelque chose.

En ce qui concerne le problème, je voudrais regarder the_current_time. Vous n'êtes pas en train de remplir les minutes, donc 10:05 deviendra 105, ou 1:05. Je ne vois pas comment cela pourrait causer des drames, car les calculs ne dépendent pas de cette valeur, mais cela changera la branche if que vous utiliserez.


Ah, je ne joue pas le calcul de différence de time_hours dans la première branche de if. Il utilise opening_hours au lieu de target_hours. Ceci explique pourquoi un mauvais the_current_time fera une différence sur la valeur rapportée.

+0

Merci beaucoup pour votre réponse vhallac, je n'ai pas besoin de cela pour calculer le temps jusqu'à ce qu'il rouvre? –

+0

Vous pouvez ignorer mes commentaires sur le refactoring en toute sécurité. Je l'ai mentionné, parce que vous pouvez réduire la fonction d'environ 10-15 lignes, et moins de lignes de code cache moins de bugs. Vous avez seulement besoin de mettre à zéro les minutes dans 'the_current_time' (ou le calculer comme' hours * 100 + minutes'). – vhallac

+0

Merci beaucoup pour cela je l'ai eu le travail! –