为什么Safari / Opera无法使用此javascript代码?

时间:2010-04-24 17:57:56

标签: javascript datetime date safari opera

我正在制作一个会显示预订的日历。包含预订的高度是根据预订的长度动态计算的。以下代码在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,所以我认为它必须是此函数中导致问题的东西。

任何帮助都将不胜感激。

由于

罗宾

3 个答案:

答案 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)

想出来。传递给函数的变量没有正确创建日期。在创建日期之前,我需要单独解析输入。