Rrule: toString()์—์„œ DTSTART๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์— ๋งŒ๋“  2015๋…„ 01์›” 25์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jakubroztocil/rrule

DTSTART ๋ฐ DTEND๋Š” iCalendar RRULE์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฉฐ .toString()์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•œ iCalendar ๊ตฌ๋ฌธ์ด ๋  "DTSTART=x;DTEND=x;RRULE=x"์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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() )์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŒŒ์„œ์—๋„ ์˜ต์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ๋‚ด ํ•„์š”์— ๋งž๋Š” ๋„์šฐ๋ฏธ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(์ฐธ๊ณ : typescript๋กœ ์ž‘์„ฑ๋จ)

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($ ;DTSTART=...; Moment ๋‚ ์งœ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ–ˆ์ง€๋งŒ ์•„์ด๋””์–ด๋Š” ์•Œ ์ˆ˜ ์žˆ์Œ) RRuleSet. ๊ทธ๋Ÿฐ ๋‹ค์Œ RuleSet์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์˜ DTSTART ์„น์…˜ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๋ชจ๋“  ์„น์…˜์„ ํ•จ๊ป˜ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : 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 ์˜ ์กฐ์–ธ ๋•๋ถ„์— ํ˜ธํ™˜๋˜๋Š” rrule ๋ฌธ์ž์—ด์„ ์–ป๋Š” ๊ฒƒ์ด ๊ทธ๋ฆฌ ์–ด๋ ต์ง€๋Š” ์•Š์ง€๋งŒ Python์˜ dateutil๋กœ ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. RFC์™€ Python์˜ ๊ตฌ๋ฌธ์—๋Š” ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ๋งค์šฐ ๊ฐœ๋ฐฉ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ด์ œ TZID ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฏ€๋กœ(#261) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋” ์ด์ƒ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 2.4.0 ์ด์ „ ์ถœ๋ ฅ ๋ฌธ์ž์—ด์„ ๊ณ„์† ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€๋งŒ RFC ํ˜ธํ™˜ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋ฉด ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ์†”๋ฃจ์…˜์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

^ ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋‚ด ๋งˆ์ง€๋ง‰ ์ง„์ˆ ("๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋” ์ด์ƒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค")์ด ์ด์ œ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ #267์— ์˜ํ•ด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ RFC๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค!

#269์— ์˜ํ•ด ์ˆ˜์ •๋จ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰