Rrule: DTSTART nicht in toString() ausgeben

Erstellt am 25. Jan. 2015  ·  11Kommentare  ·  Quelle: jakubroztocil/rrule

DTSTART und DTEND sind nicht Teil von iCalendar RRULE und sollten bei .toString() nicht eingeschlossen werden.

Generieren Sie vielleicht so etwas wie "DTSTART=x;DTEND=x;RRULE=x", was eine gültige iCalendar-Syntax wäre.

enhancement

Hilfreichster Kommentar

:+1: für diese Ausgabe

AFAIK, DTSTART soll immer eine andere Zeile sein, nicht nur durch ; begrenzt, also wie das Beispiel, auf das in #84 verwiesen wird (Zeilenumbrüche sind wichtig):

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

Ich _glaube nicht_ (aber warte auf Korrektur, falls falsch), dass die Verkettung dieser Zeilen mit einem ; RFC 5545 gültig ist.

Alle 11 Kommentare

auch plus 1 dazu

Einverstanden - dies verursacht einige Probleme bei der Zusammenarbeit mit anderen Implementierungen (z. B. _Python dateutil_)

:+1: für diese Ausgabe

AFAIK, DTSTART soll immer eine andere Zeile sein, nicht nur durch ; begrenzt, also wie das Beispiel, auf das in #84 verwiesen wird (Zeilenumbrüche sind wichtig):

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

Ich _glaube nicht_ (aber warte auf Korrektur, falls falsch), dass die Verkettung dieser Zeilen mit einem ; RFC 5545 gültig ist.

@jkbrzt akzeptierst du dafür Pull Requests?

Da dies eine Breaking Change wäre, könnte ich mir vorstellen, es in einer separaten Funktion zu implementieren, zB icalString() und dem Parser auch eine Option zu geben.

Für alle anderen, die auf dieses Problem stoßen, habe ich eine Hilfsfunktion erstellt, die für meine Anforderungen zu funktionieren scheint (Hinweis: Sie ist in Schreibmaschinenschrift geschrieben).

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');
}

Sie geben ihm ein RRuleSet und ein Startdatum (ich habe es für die Verwendung mit Moment -Daten eingerichtet, aber Sie verstehen die Idee) und es geht durch und entfernt alle ;DTSTART=...; -Abschnitte darin das RRuleSet. Dann fügt es einen richtig formatierten DTSTART -Abschnitt am Anfang des Regelsatzes hinzu und fügt dann alle Abschnitte zusammen.

Hinweis: Ich _denke_, dass nur ein DTSTART -Wert vorhanden sein muss. Vielleicht gibt es jedoch iCalendar-Varianten, bei denen dies nicht zutrifft (außerhalb meines Anwendungsfalls).

Um eine konforme Regelzeichenfolge (ohne DTSTART) zu erhalten, besteht eine Möglichkeit darin, RRule.optionsToString direkt zu verwenden:

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)

Gibt es hierzu Neuigkeiten? Dank @phillbakers Rat ist es nicht allzu schwierig, eine konforme Regelzeichenfolge zu erhalten, aber es wäre schön, mit Pythons dateutil Plug-and-Play spielen zu können.

Zugegeben, es gibt einige syntaktische Unterschiede zwischen RFC und Python. Wäre sehr offen für eine Pull-Anfrage, die dies anspricht!

Nachdem TZID implementiert wurde (#261), kann die Bibliothek keine Strings mehr parsen, die sie ausgibt. Ich denke, eine abwärtskompatible Lösung kann erreicht werden, indem weiterhin Ausgabezeichenfolgen vor 2.4.0 analysiert werden, aber RFC-kompatible Zeichenfolgen ausgegeben werden.

^ Meine letzte Aussage hier ("die Bibliothek kann keine Zeichenfolgen mehr analysieren, die sie ausgibt") ist jetzt falsch, dies wurde gerade durch #267 behoben. Dennoch wäre es ideal, dem RFC zu entsprechen!

Behoben durch #269

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

zeluspudding picture zeluspudding  ·  11Kommentare

fatshotty picture fatshotty  ·  5Kommentare

anthwinter picture anthwinter  ·  11Kommentare

marcoancona picture marcoancona  ·  22Kommentare

maconfr picture maconfr  ·  6Kommentare