2010-04-24 63 views
0

我正在制定將顯示預訂的日曆。包含預訂的高度是根據預訂的長度動態計算的。下面的代碼工作得很好在Firefox,但不是在Safari或Opera:爲什麼Safari/Opera無法使用此JavaScript代碼?

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; 
} 

綜上所述,在日曆上每一個小時爲30像素的高度。第二個if語句處理第二天的預訂結束。

如果我用return 510替換整個代碼塊,Safari的行爲和預期一樣,並將每個預訂的高度設置爲510px,所以我認爲它必須是導致此問題的此功能中的某個東西。

任何幫助,將不勝感激。

感謝

羅賓

+0

var today = new Date();也許? – Luis 2010-04-24 18:02:57

+0

感謝您的建議,但沒有區別。我的直覺告訴我們,這與UTC和非UTC的比較和混合有關,但我不能讓我的生活得到它的工作。 – 2010-04-24 18:11:10

+0

你可能會發現有興趣看看jQuery UI ... http://jqueryui.com/demos/datepicker/#inline – Alerty 2010-04-24 19:32:14

回答

0

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

描述了四個構造函數JavaScript日期對象的創建:

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不喜歡這種比較。 – 2010-04-24 18:28:20

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) ; 

會更簡單。

相關問題