Hago calendario con eventos. Cada evento tiene hora de inicio y hora de finalización (ambas - fechas). Quiero que la altura de cada evento sea dinámica, eso depende de la duración del evento (diferencia entre el inicio y el final).
Cada vez que la celda en el calendario tiene una altura fija, es 63px. Duración de cada celda: 15 minutos. Estaré muy feliz y agradecido con usted por su ayuda.
Si te entiendo bien tienes una altura fija por cada 15 minutos en un día, ¿no?
Ahora, si conoce la hora de inicio y finalización, calcula la duración como end - start . Para hacer esto, es mejor que primero convierta la fecha de finalización y de inicio en minutos. No sé cómo almacena los datos de tiempo, tal vez tenga la hora y los minutos para la hora de inicio y finalización o tal vez algo más, pero necesita convertir eso en minutos (es decir, 6:30 a.m. se convierte en 6 * 60 + 30, que es la cantidad de minutos desde el inicio de ese día, luego restas end - start y obtienes la duración del evento en minutos.
Ahora, calcular la altura una vez que tienes la duración del evento en minutos es fácil ya que tienes una altura fija para cada 15 minutos. Simplemente calcule (duration / 15) * fixedHeightForCell . El razonamiento de esta fórmula es que desea ver cuántas celdas llena su evento (es decir, cuántos 15 minutos caben en la duración del evento) y luego multiplicar eso por la altura de la celda.
Es posible que la fórmula anterior le proporcione valores decimales (es decir, 300,4325 píxeles), lo que, por supuesto, no tiene sentido para los píxeles. Esto sucede solo cuando su duración no es un múltiplo de 15 (es decir, cuando su evento no es exactamente tan largo como una cantidad de celdas). Dado que los valores decimales no tienen sentido para los píxeles, simplemente puede redondear esos resultados (es decir Math.round((duration / 15) * fixedHeightForCell) .
Espero que esto haya ayudado.