Skip to content

Instantly share code, notes, and snippets.

@IagoLast
Last active February 11, 2025 10:06
Show Gist options
  • Save IagoLast/0412a8d3901a615d6cdfaa094348abec to your computer and use it in GitHub Desktop.
Save IagoLast/0412a8d3901a615d6cdfaa094348abec to your computer and use it in GitHub Desktop.
TimeTime Challenge

Editor de horarios.

Introducción

En miles de aplicaciones web tenemos editores de horarios, visualmente son algo como esto:

https://cdn.dribbble.com/userupload/4020804/file/original-1fb78005e50233e423b22873f0c74f4a.png?resize=2048x1536&vertical=center

En TimeTime tenemos esto modelado de la siguiente forma:

const schedule: {
  timezone: 'Europe/Madrid',
  
  workingHours: {
    mon: [{ start: '09:00', end: '13:00' }, { start: '15:00', end: '18:00' }],
    tue: [{ start: '09:00', end: '13:00' }, { start: '15:00', end: '18:00' }],
    wed: [{ start: '09:00', end: '13:00' }, { start: '15:00', end: '18:00' }],
    thu: [{ start: '09:00', end: '13:00' }, { start: '15:00', end: '18:00' }],
    fri: [{ start: '09:00', end: '13:00' }, { start: '15:00', end: '17:00' }],
    sat: [{ start: '10:00', end: '14:00' }],
    sun: [], // Domingo libre
  }
}

Sin embargo este formato tiene una serie de problemas. La más evidente es que es complicado modelar horarios que no cierran a medianoche. Por ejemplo un bar que abra de 10:30 a 03:00.

Problema & pistas

La pregunta es muy sencilla, (la solución quizá no)

¿Qué formato se te ocurre para modelar horarios?

👉 Ten en cuenta los diferentes escenarios que se puedan dar.

👉 Los autores de las mejores respuestas recibirán entradas para la http://jsconf.es/ por cortesía de TimeTime.

👉 Puedes participar contestando a este gist, o por twitter, citando a @iagolast o a @odin_delrio

👉 No intentes copiar de nuestra API. Está mal y tenemos que actualizarla :trollface:

@torresgol10
Copy link

Para modelar horarios, yo usaría timestamps (o ISO 8601) para definir el primer evento (start/end) y un campo de recurrencia al estilo Google Calendar: reglas RRULE/RDATE/EXDATE (RFC 5545) que permitan manejar casos complejos: Ej: RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=TU,FR

https://developers.google.com/calendar/api/concepts/events-calendars?hl=es-419#recurrence_rule

@GalindoSVQ
Copy link

GalindoSVQ commented Feb 11, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment