DTSTARTおよびDTENDはiCalendarRRULEの一部ではないため、.toString()を実行するときに含めるべきではありません。
おそらく、有効なiCalendar構文である「DTSTART = x; DTEND = x; RRULE=x」のようなものを生成します。
またプラス1これ
同意しました-これは、他の実装(_Python dateutil_など)と相互運用するときにいくつかの悲しみを引き起こしています
:+1:この問題の場合
AFAIK、DTSTARTは、 ;
で区切られているだけでなく、常に別の行であると想定されているため、#84で参照されている例のように(改行は重要です):
DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR
これらの行を;
と連結することが有効なRFC 5545であるとは_考えません_(ただし、間違っている場合は修正を待ちます)。
@jkbrztこれに対するプルリクエストを受け入れますか?
これは重大な変更になるため、 icalString()
などの別の関数で実装し、パーサーにもオプションを与えることを想像できます。
この問題に遭遇した他の人のために、私は自分のニーズに合っているように見えるヘルパー関数を作成しました(注:タイプスクリプトで書かれています)
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');
}
RRuleSet
とstartDate( Moment
の日付で使用するように設定しましたが、アイデアはわかります)を指定すると、の;DTSTART=...;
セクションがすべて削除されます。 RRuleSet。 次に、RuleSetの先頭に適切にフォーマットされDTSTART
セクションを1つ追加してから、すべてのセクションを結合します。
注: DTSTART
の値が1つだけ存在すると思います。 ただし、これが当てはまらないiCalendarフレーバーがあるかもしれません(私のユースケース以外)。
(DTSTARTなしで)準拠したrrule文字列を取得するには、 RRule.optionsToString
を直接使用するオプションがあります。
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)
これに関する更新はありますか? @phillbakerのアドバイスのおかげで、準拠したrrule文字列を取得するのはそれほど難しくありませんが、Pythonのdateutilをプラグアンドプレイできると便利です。
同意しました。RFCとPythonの構文にはいくつかの違いがあります。 これに対処するプルリクエストに対して非常にオープンになります!
TZID
が実装されたので(#261)、ライブラリは出力する文字列を解析できなくなります。 2.4.0より前の出力文字列の解析を続行し、RFC準拠の文字列を出力することで、下位互換性のあるソリューションに到達できると思います。
^ここでの私の最後のステートメント(「ライブラリは出力する文字列を解析できなくなりました」)が正しくなくなりました。これは#267で修正されました。 それでも、RFCに準拠することが理想的です。
#269で修正
最も参考になるコメント
:+1:この問題の場合
AFAIK、DTSTARTは、
;
で区切られているだけでなく、常に別の行であると想定されているため、#84で参照されている例のように(改行は重要です):これらの行を
;
と連結することが有効なRFC 5545であるとは_考えません_(ただし、間違っている場合は修正を待ちます)。