Rrule: No generar DTSTART en toString()

Creado en 25 ene. 2015  ·  11Comentarios  ·  Fuente: jakubroztocil/rrule

DTSTART y DTEND no forman parte de iCalendar RRULE y no deben incluirse al ejecutar .toString().

Tal vez genere algo como "DTSTART=x;DTEND=x;RRULE=x" que sería una sintaxis válida de iCalendar.

enhancement

Comentario más útil

:+1: para este problema

AFAIK, siempre se supone que DTSTART es una línea diferente, no solo delimitada por ; , como el ejemplo al que se hace referencia en el n. ° 84 (las nuevas líneas son significativas):

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR

No _creo_ (pero espero la corrección si es incorrecto) que concatenar estas líneas con ; sea RFC 5545 válido.

Todos 11 comentarios

también más 1 esto

De acuerdo: esto está causando algunos problemas al interoperar con otras implementaciones (por ejemplo, _Python dateutil_)

:+1: para este problema

AFAIK, siempre se supone que DTSTART es una línea diferente, no solo delimitada por ; , como el ejemplo al que se hace referencia en el n. ° 84 (las nuevas líneas son significativas):

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR

No _creo_ (pero espero la corrección si es incorrecto) que concatenar estas líneas con ; sea RFC 5545 válido.

@jkbrzt , ¿acepta solicitudes de incorporación de cambios para esto?

Dado que esto sería un cambio importante, podría imaginar implementarlo en una función separada, por ejemplo, icalString() y dar una opción al analizador también.

Para cualquier otra persona que se encuentre con este problema, creé una función de ayuda que parece funcionar para mis necesidades (nota: está escrito en mecanografiado)

export function rrulesetToIcalString(schedule: RRuleSet, startDate: Moment): string {
  // matches `;DTSTART=20180125T080000Z` until `;` or end
  const icalStrings = schedule.valueOf().map(ruleString => ruleString.replace(/;DTSTART=.*?(?=(?:;)|$)/, ''));

  icalStrings.unshift(`DTSTART;TZID=UTC:${startDate.utc().format('YYYYMMDDTHHmmss')}`);

  return icalStrings.join('\n');
}

Le das un RRuleSet y una fecha de inicio (lo configuré para usarlo con fechas Moment , pero entiendes la idea) y pasa y elimina cualquier sección de ;DTSTART=...; en el RRuleSet. Luego agrega una sección DTSTART con el formato adecuado al principio del conjunto de reglas y luego une todas las secciones.

Nota: Creo que solo se supone que hay un DTSTART presente. Sin embargo, tal vez haya sabores de iCalendar en los que esto no sea cierto (fuera de mi caso de uso).

Para obtener una cadena de regla compatible (sin DTSTART), una opción es usar RRule.optionsToString directamente:

var rule = new RRule({
   freq: RRule.WEEKLY,
   interval: 5,
   byweekday: [RRule.MO, RRule.FR],
   dtstart: new Date(2012, 1, 1, 10, 30),
   until: new Date(2012, 12, 31)
});
var copy = Object.assign({}, rule.origOptions);
delete copy.dtstart
RRule.optionsToString(copy)

¿Algún avance en esto? No es demasiado difícil obtener una cadena de reglas compatible, gracias al consejo de @phillbaker , pero sería bueno poder conectar y jugar con dateutil de Python.

De acuerdo, hay algunas diferencias en la sintaxis con el RFC y con Python. ¡Estaría muy abierto a una solicitud de extracción que aborde esto!

Ahora que se ha implementado TZID (#261), la biblioteca ya no puede analizar las cadenas que genera. Creo que se puede llegar a una solución compatible con versiones anteriores al continuar analizando las cadenas de salida anteriores a 2.4.0, pero generando cadenas compatibles con RFC.

^ mi última declaración aquí ("la biblioteca ya no puede analizar las cadenas que genera") ahora es incorrecta, esto se solucionó en el n. ° 267. Aún así, ¡sería ideal cumplir con el RFC!

Reparado por # 269

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

mapidemic picture mapidemic  ·  7Comentarios

zeluspudding picture zeluspudding  ·  11Comentarios

agordeev picture agordeev  ·  16Comentarios

espen picture espen  ·  10Comentarios

kirrg001 picture kirrg001  ·  5Comentarios