2010-04-24 4 views
0

나는 예약을 보여줄 달력을 만들고 있습니다. 예약을 포함하는 높이는 예약 기간에 비례하여 동적으로 계산됩니다. 다음 코드는 Firefox에서 완벽하게 작동하지만 Safari 나 Opera에서는 작동하지 않습니다.Safari/Opera가이 자바 스크립트 코드와 작동하지 않는 이유는 무엇입니까?

function calculateBookingHeight(from, to) { 
    var today = new Date; 
    var end = new Date.UTC(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),23); 
    var start = new Date.UTC(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),6); 
    var from = new Date(from); 
    var to = new Date(to); 
    if (from > start && to < end) { 
     var difference = (to - from)/120000; 
    } else if (from > start && to > end) { 
     var difference = (end - from)/120000; 
    } else { 
     var difference = 510 
    } 
    return difference; 
} 

요약하면 달력의 각 시간은 30px입니다. 두 번째 if 문은 다음날 예약의 끝을 처리합니다.

전체 코드 블록을 return 510으로 바꾼 경우 Safari는 예상대로 동작하고 각 예약의 높이를 510px로 설정하므로 문제를 일으키는이 함수에 있어야한다고 가정합니다.

도움을 주시면 감사하겠습니다.

감사

로빈

+0

var today = new Date(); 아마도? – Luis

+0

제안에 감사하지만 차이는 없습니다. 내 직감은 UTC와 비 UTC의 혼합 및 비교와 관련이 있다고 말하지만, 필자의 삶은 그렇지 못하다. –

+0

jQuery UI를 살펴 보는 것이 흥미로울 수 있습니다 ... http://jqueryui.com/demos/datepicker/#inline – Alerty

답변

0

http://www.w3schools.com/js/js_obj_date.asp

네 생성자와 자바 스크립트 Date 객체의 생성을 설명합니다 :

new Date() // current date and time 
new Date(milliseconds) //milliseconds since 1970/01/01 
new Date(dateString) 
new Date(year, month, day, hours, minutes, seconds, milliseconds) 

괄호없이 호출이 루이스 포인트로 유효하지 JS이다 아웃.

+0

불행히도, 그게 문제가 아닙니다. Safari Web Inspector를 살펴보면 새로운 Date.UTC는 날짜가 아닌 객체를 생성하므로 Safari와 비교할 필요가 없습니다. –

0

알아 냈어. 날짜가 함수에 전달 된 변수에서 제대로 작성되지 않았습니다. 필자는 날짜를 만들기 전에 입력을 별도로 구문 분석해야했습니다. 문제의

1

하나는

var end = new Date.UTC(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),23); 
var start = new Date.UTC(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),6); 

은 즉

var end = new Date(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),23); 
var start = new Date(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),6); 

, UTC는 객체를 얻는 이유 인 getter 방법입니다해야한다는 것입니다. 이러한 인수를 사용하여 날짜를 생성하려면 생성자에게 전달하십시오.

var end = today ; 
end.setUTCHours(23) ; 

를 사용

더 간단 할 것이다.

관련 문제