2011-09-01 5 views
0

이 jQuery 코드를 사용하여 왼쪽 10 시까 지 왼쪽에 표시 할 코드입니다.Jquery Daily Timer Fail

오전 10 시부 터 오후 14 시까 지 일부 이미지가 제거됩니다.

14:00 이후에는 오전 10 시까 지 남은 시간이 표시됩니다. 또한 주말을 고려하여 오프셋을 추가합니다.

훌륭하게 대부분의 시간은, 그러나 그것은 ... 그것은 시간이 지남에 길을 간다 14시 후 보인다 작품

사람이 실패하는 이유, 내가 오랫동안을 위해 그것을 찾아 봤는데 볼 수 ... 이제 나는 혼란에 빠졌어! 도와주세요!

$(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); 
} 

});

답변

2

먼저 코드를 약간 단순화합니다. 모든 세 가지 지점에서 3 개의 var 계산은 동일하게 보입니다. 따라서 업데이트는 #hours_left입니다. if에서 문제를 해결할 수 있어야합니다. 이렇게하면 if 브랜치의 수를 3 개에서 1 개로 줄일 수 있습니다.

문제는 the_current_time입니다. 분을 0으로 채우지 않으므로 10:05는 105 또는 1:05가됩니다. 계산이이 값에 의존하지 않기 때문에 이것이 어떤 드라마를 유발할 지 어떻게 볼 수는 없지만 당신이 취할 if 브랜치를 바꿀 것입니다.


아, 나는 if의 첫 번째 지점에서 time_hours 계산 차이를 놓쳤다. target_hours 대신 opening_hours을 사용합니다. 나쁜 the_current_time이보고 된 값을 변경하는 이유를 설명합니다.

+0

답장을 보내 주셔서 대단히 감사합니다. vhallac이 다시 열릴 때까지 시간을 계산해야합니까? –

+0

리팩토링에 대한 의견은 무시해도됩니다. 나는 당신이 함수를 약 10-15 줄 줄이고 코드 줄을 줄이면 버그가 줄어들 기 때문에 언급했다. 'the_current_time'에서 분만 제로 (또는'hours * 100 + minutes'로 계산)하면됩니다. – vhallac

+0

대단히 고맙습니다. –