Fecha y hora

Generador de RRULE · Comprueba las fechas de tu calendario

Crea una repetición o analiza una regla existente con inicio, zona horaria y fechas de ejemplo.

Generador de RRULE

Condiciones de repetición

BYDAY: MO,WE o 2TU,-1FR; ordinales solo mensuales/anuales. BYMONTHDAY: −31…−1, 1…31; BYMONTH: 1…12; BYSETPOS: −366…−1, 1…366 con otro filtro BY. Separa listas con comas; los filtros vacíos se omiten.

Regla y vista previa de fechas

La entrada se procesa en este navegador y no se envía a ningún servidor.

Opciones

Inicio: fecha ISO local con segundos, como 2026-09-14T09:00:00. UNTIL: fecha UTC con Z. DTSTART debe cumplir la propia regla.

Las horas inexistentes usan el desfase anterior al cambio y muestran la hora desplazada. Las horas duplicadas toman la primera ocurrencia. Las fechas imposibles se omiten.

Solo día/semana/mes/año. 8.192 unidades UTF-16, 100 exclusiones y COUNT hasta 10.000. Vista previa: 1–1.000 fechas, diez años desde DTSTART, hasta 2099; límite de cinco segundos.

La entrada o las opciones han cambiado. Actualiza los resultados antes de exportarlos.

El Generador de RRULE ayuda a comprobar una reunión quincenal, un cierre de mes o una cita cancelada antes de configurar el calendario. Las reglas de recurrencia necesitan un inicio coherente: cambiar el día de la semana sin revisar DTSTART puede dejar una serie indefinida.

Las fechas recurrentes se calculan desde DTSTART, no desde hoy. El formulario y el texto se conservan por separado, y las próximas ocurrencias muestran su zona horaria para que una cadena correcta no oculte un horario inesperado.

Por qué usar este Generador de RRULE

El día 31 no significa fin de mes

El Generador de RRULE distingue ambas intenciones. BYMONTHDAY=31 omite los meses sin ese día; BYMONTHDAY=-1 elige el último día real de cada mes. Revisar febrero permite detectar si una factura debía emitirse al cierre o únicamente el día 31.

Dos secuencias de calendarios comparan el día 31 fijo, que omite un mes corto, con el último día de todos los meses.

Una exclusión no añade otra fecha

COUNT limita primero la serie original y EXDATE elimina instantes coincidentes después. Si se excluye una de cinco citas, quedan cuatro. El informe muestra cuántas exclusiones coincidieron sin prolongar la regla.

Una de cinco marcas de ocurrencia está tachada; quedan cuatro y no se añade otra al final.

Alinear el inicio, la repetición y el final

01

Elegir un inicio que cumpla la regla

Los ejemplos incluyen una regla y un DTSTART compatible. Al pasar de lunes a segundo martes, revisa también la fecha inicial. Ejemplo y Borrar muestran una vista del cambio antes de aplicarlo; Deshacer recupera los datos y el resultado juntos.

02

Separar el reloj local del fin en UTC

Inicio y exclusiones del formulario son fechas ISO locales con segundos en la zona IANA elegida. UNTIL es un instante UTC con Z. Un DTSTART en el texto tiene prioridad sobre los campos alternativos; consulta el contexto efectivo en el resultado.

03

Leer el motivo de parada

El cálculo automático espera 350 ms. Desactívalo para usar el botón o Ctrl/Cmd+Enter. Los cambios bloquean las exportaciones antiguas. Se muestran 50 fechas cada vez; el informe y el JSON incluyen toda la vista previa calculada.

Cómo se selecciona cada fecha

Intervalos con límites de semana

INTERVAL avanza días, semanas, meses o años. BYDAY admite días de semana y ordinales en reglas mensuales o anuales. WKST determina el inicio de semana y puede modificar una repetición cada dos semanas.

Posiciones dentro de los candidatos

BYMONTH selecciona meses; BYMONTHDAY cuenta desde el comienzo o el final del mes. BYSETPOS selecciona posiciones de los candidatos del período. Lunes a viernes junto con -1 elige el último de esos días, sin calendario de festivos.

Contexto incluido en el fragmento

Una regla sola utiliza el inicio y la zona del panel. Las fechas explícitas necesitan Z o TZID. El fragmento normalizado conserva el inicio efectivo para no perder el punto de referencia al copiarlo a otra aplicación.

Horas locales junto a UTC

Cada fila contiene hora local, desfase y UTC. Si un salto horario desplaza una hora, también se muestra la hora solicitada. Una reunión semanal ordinaria conserva su hora local mientras su instante UTC puede cambiar.

Formatos admitidos y límites reales

No valida eventos completos
Se aceptan DTSTART, una RRULE y hasta 100 EXDATE. Se rechazan VEVENT, VCALENDAR, RDATE, EXRULE, extensiones, DATE de día completo y fechas explícitas flotantes. El TXT es un fragmento, no un evento ICS listo para importar.
Cuatro frecuencias y filtros concretos
No se admiten frecuencias de segundos, minutos u horas ni BYHOUR, BYMINUTE, BYSECOND, BYYEARDAY o BYWEEKNO. La hora diaria procede de DTSTART. Las propiedades desconocidas generan errores y no se descartan silenciosamente.
Inicio coherente y final único
DTSTART debe cumplir la regla. COUNT admite 1–10.000 y no puede convivir con UNTIL. Este último es UTC, no precede al inicio e incluye una ocurrencia que coincida exactamente con el instante final.
Días imposibles y horas inexistentes
Las fechas imposibles se omiten sin consumir COUNT. Los huecos horarios siguen la errata verificada 4271 de RFC 5545: desfase anterior al cambio y hora mostrada desplazada. Las horas repetidas usan la primera ocurrencia; los datos de zona dependen del navegador.
Exclusiones por instante
EXDATE puede eliminar el propio DTSTART, pero no quita días enteros ni repone ocurrencias. Las exclusiones duplicadas se normalizan. No se aplican reglas de festivos ni se reprograman citas canceladas.
Vista previa acotada
La entrada admite 8.192 unidades UTF-16. Se solicitan 1–1.000 fechas dentro de diez años desde DTSTART y entre 1970–2099. El cálculo tiene un límite de cinco segundos. Se distingue cantidad alcanzada, fin de serie y límite de búsqueda.

Generador de RRULE: preguntas frecuentes

¿Qué ocurre con el día 31 o el 29 de febrero cuando no existen?

La regla omite esas fechas y no las cuenta como ocurrencias. Para el último día de cada mes usa BYMONTHDAY=-1. Una regla anual de 29 de febrero solo tendrá fechas en años bisiestos.

¿Hay un límite en la cantidad de fechas?

La vista previa admite hasta 1.000, mientras COUNT puede definir hasta 10.000 ocurrencias originales. Una regla muy espaciada puede alcanzar antes el horizonte de diez años o 2099; el resultado explica la causa.

¿Cómo excluyo una fecha de la regla?

EXDATE es una propiedad aparte, fuera de RRULE. En el formulario escribe un instante local completo por línea; al analizar texto usa Z o TZID. El fragmento exportado expresa las exclusiones en UTC.

¿Cómo afecta el horario de verano?

La zona IANA interpreta cada fecha local. Una hora ordinaria se conserva aunque cambie UTC. Una hora inexistente usa el desfase anterior a la transición y una hora duplicada corresponde a su primera ocurrencia.

¿Se devuelve una fecha si UNTIL es anterior a DTSTART?

Aquí se muestra un error y se pide ajustar inicio o final. El inicio no se añade a la fuerza fuera del límite. Compara los instantes UTC, no solo la parte de fecha de las cadenas.

¿Una fecha inesperada?

Comprueba tu próxima serie

El Generador de RRULE reúne inicio, exclusiones y fechas resueltas. Comprueba que las horas locales y UTC reflejen tu intención antes de utilizar el fragmento.