2010-04-24 3 views
0

Je travaille sur un calendrier qui montrera les réservations. La hauteur de la réservation est calculée dynamiquement proportionnellement à la durée de la réservation. Le code suivant fonctionne parfaitement bien dans Firefox, mais pas dans Safari ou Opera:Pourquoi Safari/Opera ne fonctionne-t-il pas avec ce code 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; 
} 

En résumé, chaque heure sur le calendrier est une hauteur de 30px. La seconde déclaration if traite de la fin de la réservation étant le jour suivant. Si je remplace le bloc de code entier par return 510, Safari se comporte comme prévu et définit la hauteur de chaque réservation sur 510px. Je suppose donc que cette fonction est à l'origine de ce problème.

Toute aide serait appréciée.

Merci

Robin

+0

var aujourd'hui = new Date(); peut être? – Luis

+0

Merci pour la suggestion mais pas de différence. Mon instinct dit que c'est quelque chose à voir avec la comparaison et le mélange d'UTC et de non-UTC mais je ne peux pas pour la vie de moi le faire fonctionner. –

+0

Vous pourriez trouver intéressant de jeter un oeil à l'interface utilisateur jQuery ... http://jqueryui.com/demos/datepicker/#inline – Alerty

Répondre

0

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

Décrit la création d'un objet date javascript avec quatre constructeurs:

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) 

Votre appel sans parens ne sont pas js valides, comme points Luis en dehors.

+0

Malheureusement, ce n'est pas le problème. En regardant dans l'inspecteur Web Safari, la nouvelle date.UTC crée un objet par opposition à une date donc je suis sûr que c'est quelque chose à voir avec ça et Safari n'aime pas la comparaison. –

0

Compris. Les dates n'étaient pas créées correctement à partir des variables passées dans la fonction. J'avais besoin d'analyser séparément l'entrée avant de créer les dates.

1

L'un de vos problèmes est que

var end = new Date.UTC(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),23); 
var start = new Date.UTC(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),6); 

devrait être

var end = new Date(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),23); 
var start = new Date(today.getUTCFullYear(),today.getUTCMonth(),today.getUTCDate(),6); 

En d'autres termes, UTC est une méthode de lecture, ce qui est la raison pour laquelle vous obtenez un objet. Pour construire une date avec ces arguments, il suffit de les passer au constructeur.

En utilisant

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

serait plus simple.

Questions connexes