Почему Safari / Opera не работает с этим кодом JavaScript? - PullRequest
0 голосов
/ 24 апреля 2010

Я работаю над календарем, в котором будут показаны бронирования. Высота размещения заказа рассчитывается динамически пропорционально длине бронирования. Следующий код прекрасно работает в 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;
}

Таким образом, каждый час в календаре имеет высоту 30 пикселей. Второе утверждение if касается окончания бронирования на следующий день.

Если я заменим весь кодовый блок на return 510, Safari будет работать как положено и установит высоту каждого бронирования равной 510 пикселей, поэтому я предполагаю, что в этой функции должно быть что-то, что вызывает проблему.

Любая помощь будет оценена.

Спасибо

Robin

Ответы [ 3 ]

1 голос
/ 24 апреля 2010

Одна из ваших проблем в том, что

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 - это метод получения, поэтому вы получаете объект. Чтобы построить дату с этими аргументами, просто передайте их конструктору.

Использование

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

было бы более простым.

0 голосов
/ 24 апреля 2010

Разобрался. Даты не были созданы должным образом из переменных, переданных в функцию. Мне нужно было отдельно проанализировать ввод перед созданием дат.

0 голосов
/ 24 апреля 2010

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)

Ваш вызов без паренов недействителен, как указывает Луис.

...