Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Safari/Opera不能使用此javascript代码?_Javascript_Datetime_Date_Safari_Opera - Fatal编程技术网

为什么Safari/Opera不能使用此javascript代码?

为什么Safari/Opera不能使用此javascript代码?,javascript,datetime,date,safari,opera,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 st

我正在制作一个显示预订情况的日历。包含预订的高度根据预订的长度动态计算。以下代码在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;
}
函数calculateBookingHeight(从,到){
var today=新日期;
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=新日期(from);
var to=新日期(to);
如果(从>开始到<结束){
var差异=(至-自)/120000;
}else if(从>开始(&T)到>结束){
var差异=(结束-结束)/120000;
}否则{
var差=510
}
收益差;
}
总之,日历上每小时的高度为30像素。第二个if语句处理第二天的预订结束

如果我将整个代码块替换为
return 510
,Safari的行为与预期一致,并将每个预订的高度设置为510px,因此我认为该函数中一定有什么原因导致了问题

任何帮助都将不胜感激

谢谢

罗宾

描述使用四个构造函数创建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)

正如路易斯指出的那样,没有parens的调用是无效的。

解决了这个问题。没有通过传递到函数中的变量正确创建日期。在创建日期之前,我需要单独解析输入。

您的问题之一是

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

更直接。

var today=新日期();也许吧?谢谢你的建议,但没什么不同。我的直觉告诉我这与UTC和非UTC的比较和混合有关,但我一辈子都不能让它工作。你会发现看看jQuery UI很有趣。。。不幸的是,这不是问题所在。在Safari Web Inspector中,新的Date.UTC创建了一个对象,而不是日期,因此我确信这与此有关,Safari不喜欢这种比较。