لا يُعد DTSTART و DTEND جزءًا من iCalendar RRULE ويجب عدم تضمينهما عند إجراء .toString ().
ربما يمكنك إنشاء شيء مثل "DTSTART = x ؛ DTEND = x ؛ RRULE = x" والذي سيكون بناء جملة iCalendar صالحًا.
بالإضافة إلى 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
وتاريخ البدء (لقد قمت بإعداده للاستخدام مع تواريخ Moment
، لكنك حصلت على الفكرة) وتنتهي وتزيل أي أقسام ;DTSTART=...;
في مجموعة RRSet. ثم يقوم بإضافة قسم DTSTART
منسق بشكل صحيح في بداية RuleSet ، ثم يقوم بربط جميع الأقسام معًا.
ملاحظة: أعتقد أن هناك قيمة واحدة فقط DTSTART
موجودة. ربما توجد نكهات iCalendar حيث لا يكون هذا صحيحًا ، ولكن (خارج حالة الاستخدام الخاصة بي).
للحصول على سلسلة قاعدة متوافقة (بدون DTSTART) ، أحد الخيارات هو استخدام 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 ، ولكن سيكون من الجيد أن تكون قادرًا على التوصيل واللعب مع داتوتيل بايثون.
متفق عليه ، هناك بعض الاختلافات في بناء الجملة مع RFC و Python. سيكون منفتحًا جدًا على طلب سحب معالجة هذا!
الآن بعد أن تم تنفيذ TZID
(# 261) ، لم يعد بإمكان المكتبة تحليل السلاسل التي تخرجها. أعتقد أنه يمكن الوصول إلى حل متوافق مع الإصدارات السابقة من خلال الاستمرار في تحليل سلاسل الإخراج قبل 2.4.0 ، ولكن إخراج سلاسل متوافقة مع RFC.
^ بياني الأخير هنا ("لم يعد بإمكان المكتبة تحليل السلاسل التي تخرجها") غير صحيح الآن ، تم إصلاح هذا فقط بواسطة # 267. ومع ذلك ، سيكون من المثالي التوافق مع RFC!
تم الإصلاح بواسطة # 269
التعليق الأكثر فائدة
: +1: لهذه القضية
من المفترض دائمًا أن يكون AFAIK ، DTSTART سطرًا مختلفًا ، وليس محددًا فقط بـ
;
، لذلك مثل المثال المشار إليه في # 84 (الأسطر الجديدة مهمة):لا أفكر (لكنني أنتظر التصحيح إذا كان خطأ) أن ربط هذه الأسطر بـ
;
صالح RFC 5545.