Rrule: لا تقم بإخراج DTSTART في toString ()

تم إنشاؤها على ٢٥ يناير ٢٠١٥  ·  11تعليقات  ·  مصدر: jakubroztocil/rrule

لا يُعد DTSTART و DTEND جزءًا من iCalendar RRULE ويجب عدم تضمينهما عند إجراء .toString ().

ربما يمكنك إنشاء شيء مثل "DTSTART = x ؛ DTEND = x ؛ RRULE = x" والذي سيكون بناء جملة iCalendar صالحًا.

enhancement

التعليق الأكثر فائدة

: +1: لهذه القضية

من المفترض دائمًا أن يكون AFAIK ، DTSTART سطرًا مختلفًا ، وليس محددًا فقط بـ ; ، لذلك مثل المثال المشار إليه في # 84 (الأسطر الجديدة مهمة):

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

لا أفكر (لكنني أنتظر التصحيح إذا كان خطأ) أن ربط هذه الأسطر بـ ; صالح RFC 5545.

ال 11 كومينتر

بالإضافة إلى 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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

elazar picture elazar  ·  18تعليقات

Prinzhorn picture Prinzhorn  ·  15تعليقات

shavenwalrus picture shavenwalrus  ·  7تعليقات

espen picture espen  ·  10تعليقات

grigio picture grigio  ·  7تعليقات