我正在制作一个会显示预订的日历。包含预订的高度是根据预订的长度动态计算的。以下代码在Firefox中运行良好,但在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 :(得分: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) ;
会更直接。
答案 1 :(得分: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)
正如Luis指出的那样,你没有parens的调用不是有效的js。
答案 2 :(得分:0)
想出来。传递给函数的变量没有正确创建日期。在创建日期之前,我需要单独解析输入。