iCalendar ์ฌ์์ ๋ฐ๋ฅด๋ฉด:
The "DTSTART" property defines the first instance in the recurrence set.
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
Every other week on Monday, Wednesday and Friday until December 24,
1997, but starting on Tuesday, September 2, 1997:
DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;
BYDAY=MO,WE,FR
==> (1997 9:00 AM EDT)September 2,3,5,15,17,19,29;October
1,3,13,15,17
(1997 9:00 AM EST)October 27,29,31;November 10,12,14,24,26,28;
December 8,10,12,22
rrule.js๋ 9์ 2์ผ์ ๋ฐ์์ผ๋ก ํฌํจํ์ง ์์ต๋๋ค. rrule.js์์ ์ฒซ ๋ฒ์งธ ๋ฐ์์ 9์ 3์ผ์ ๋๋ค.
์ฌ๊ธฐ์ ํ๋ฌ์ค 1. RRule์ ๋ฐ๋ชจ ์ฑ์ ์์ ๋ ์ง/๊ธฐ๊ฐ์ ์ ํ ์ค์ํ์ง ์์ต๋๋ค.
๋์ํฉ๋๋ค. Google RFC 2445 Java lib๋ฅผ ๋ค๋ฃฐ ๋ ์ด๊ฒ์ด ์ ๋ฅผ ๋ฒ๋ ธ์ต๋๋ค.
:+1: ์ด๊ฒ์ด ํ์ค(๋ฐ Google ์บ๋ฆฐ๋, Apple(Mac OS/iOS/iCloud) ์บ๋ฆฐ๋์ ๊ฐ์ ํธํ ์์คํ )์ ์๋ ๋ฐฉ์์ ๋๋ค.
@jkbrzt , ํ์ฌ rrule.js๋ python dateutil์ ๊ธฐ๋ฅ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
RFC์ ๋ฌธ์ํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์์ ๋ ์ง/์๊ฐ(dtstart)์ ์ง์ ๋ ๊ท์น์ ๋ง์ง ์๋ ํ ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต ์ธ์คํด์ค๊ฐ ์๋๋๋ค.
โโ dateutil ๋ฌธ์
์ด๊ฒ์ dateutil์์ ํฌ๊ฒ ๋ฒ์ด๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ผ๋ฉฐ ์ด ๊ฒฝ์ฐ์ ์๋ฏธ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฑฐ์ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ์๊ฐ? ๋ณํ๋ฅผ ์ง์งํ์๊ฒ ์ต๋๊น?
@hwangmoretime rrule.js ๊ฐ RFC์ ๋ค๋ฅธ ์ ์ ๋ฌธ์ํํ README์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณํฉํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์, rrule.js
์ค์ํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค(์ด ๋ฌธ์ + byday
ํค์๋ ์ธ์). ํ์ง๋ง ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆด ์ ์์ผ๋ฏ๋ก ์ ๋ฌธ์ํํด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ์ฌ์ ํ ๋ฒ๊ทธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ all()
์์๋ ์๋ํ์ง๋ง between
๋ฉ์๋์์๋ ์๋ํ์ง ์์ต๋๋ค. ์๋ ์์์๋ readme์ ๋ฐ๋ผ RRuleSet
๊ฐ์ฒด์ dtstart
๋ฐ rdate
์ค์ ํ์ต๋๋ค.
๊ท์น ์งํฉ
RRuleSet {_cache: Object, _rrule: Array[1], _rdate: Array[1], _exrule: Array[0], _exdate: Array[0]}
rruleSet.valueOf()
["RRULE:FREQ=YEARLY;DTSTART=20120122T000000Z;INTERVAL=1;WKST=0;BYMONTH=3;BYMONTHDAY=19;BYHOUR=13;BYMINUTE=39;BYSECOND=27", "RDATE:20120122T000000Z"]
rruleSet.all()[0]
Sat Jan 21 2012 16:00:00 GMT-0800 (PST)
rruleSet.between(startDatetime, endDatetime)
[Sat Mar 19 2016 13:39:27 GMT-0700 (PDT)]
all
๋ฉ์๋ ํธ์ถ์ ๊ฒฝ์ฐ ๋ฐํ๋ ๋ ์ง๋ ์๋ dtstart
์ ์ผ์นํ์ง๋ง between
์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ํ์ฌ ์๊ฐ์ผ๋ก ๋์๊ฐ๋๋ค.
์ฌ๊ธฐ์ ์ฝ๊ฐ์ ์ปจํ ์คํธ๊ฐ ์์ต๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ, ruleset์ ๋ด๊ฐ ์์ํ ๊ฒ๊ณผ ์ ํํ ๋ฐ๋์ ๋๋ค. ๋ ์ง ๋ชฉ๋ก์ ์์ฑํฉ๋๋ค. ์ฌ๊ธฐ์ 0๋ฒ์งธ ์์๋ ์๋ ์ํ๋ ์ด๋ฒคํธ์ ์์์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ ์ง์ ์๋ฆฌ์ฆ๋ก ํ์ฅ๋๋ ํ์ฌ์ ๋๋ค. 1์ 21์ผ์ ๋ ์ง ๋ชฉ๋ก์ ์ป์ ๊ฒ์ผ๋ก ์์ํ์ง๋ง ํ์ฌ ์๊ฐ(3์ 22์ผ)์ ์ฌ์ฉํ์ฌ rruleset์ด "๋ฐ๋ณต"๋์์ต๋๋ค.
๋๋ repo๋ฅผ ๊ฐ์ ธ ์์ ๋ช ๊ฐ์ง ํ ์คํธ๋ก ์ด๊ฒ์ ์ขํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ง๋ง ์กฐ์ธ์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
dtstart์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. https://stackoverflow.com/questions/54517101/rrule-not-setting-correct-time-if-dtstart-is-set ์ฐธ์กฐ
์์ฑ์์์ dtstart๋ฅผ ์ค์ ํ๋ฉด .all()์ ์ฌ์ฉํ์ฌ ์ ํํ ์๊ฐ์ ์ป์ ์ ์์ง๋ง ๋์ค์ dtstart๋ฅผ ์ค์ ํ๋ฉด ํ์ฌ ์๊ฐ์ ์ป์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก dtstart
๋ ๋ค๋ฅธ ์์คํ
๊ณผ ๋ ์ผ๊ด์ฑ ์๊ฒ ํฌํจ๋์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
ํ์ฌ ๋์์ ๋ฏธ๋ฌํจ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ํ์ ๋ง๋ค์์ต๋๋ค. https://codepen.io/arshaw/pen/qwEQNO?editors=0010
๊ธฐ๋ณธ์ ์ผ๋ก
dtstart
๋ ๋ค๋ฅธ ์์คํ ๊ณผ ๋ ์ผ๊ด์ฑ ์๊ฒ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋์. ์ง๊ธ rrule์ ๋ํด ์์๋ณด์ธ์. ์๊ฐ์ ํฌ๊ฒ ์ ์ฝํ ์ ์์ง๋ง(๊ณ ๋ง์ต๋๋ค!), ์ด ํฌ๊ด์ ์ธ ๋ ์ง๋ ํด๊ฒฐํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ ์ ๋ ผ๋ฆฌ๊ฐ ํ์ํ ์ด์ํ ๋์์ค๋ฅผ ๋ํ๋ ๋๋ค. ์ด ์ ๋ฐ์ดํธ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค. python-dateutil๊ณผ ์ผ์นํ๋ ํ์ฌ ๋์์ ์ดํดํ์ง๋ง ์ด์ํ ํธ์ฐจ๋ฅผ ์์์ํค๋ ๊ฒ๋ณด๋ค RFC ํ์ค๊ณผ ์ผ์นํ๋ ๋์์ ์ฐ์ ์์๊ฐ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์๋ ์๊ฒฌ์ ๋ฐ๋ผ:
RRuleSet์ ์ฌ์ฉํ๊ณ dtstart๋ฅผ rdate๋ก ์ถ๊ฐํ๋ฉด ์๋ ๋์์ ์ป์ ์ ์์ต๋๋ค.
๋ด๊ฐ ๋งํ ์ ์๋ ํ, ์ด๊ฒ์ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ํ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ณต์ก์ฑ์ ์๋นํ ๊ณผ์ ํ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ท์น ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
new RRule({
freq: RRule.WEEKLY,
dtstart: new Date(Date.UTC(2020, 10, 1, 21, 0, 0)),
count: 10,
interval: 2,
byweekday: RRule.MO
})
์ด๊ฒ์ ์์ ๋ ์ง๊ฐ 2020๋ 11์ 1์ผ ์ผ์์ผ์ธ "๋งค 2์ฃผ๋ง๋ค ์์์ผ์ 10๋ฒ"์ผ๋ก ๋ณํ ๋์ด์ผ ํฉ๋๋ค .
์ด์ ์์ ๋ ์ง ์ดํ์ ์ฒซ ๋ฒ์งธ ๋ฌ๋ ฅ ์์์ผ์ 11์ 2์ผ์ ๋๋ค... ๋ฐ๋ผ์ ๊ฐ๊ฒฉ์ด 2์ธ ๊ฒฝ์ฐ ์์ฑ๋ ์ด๋ฒคํธ ๋ ์ง๋ 11์ 2์ผ, 11์ 16์ผ, 11์ 30์ผ ๋ฑ์ด ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ rrule
ํจํค์ง๋ ๋์ 11์ 9์ผ, 11์ 23์ผ ๋ฑ์ ๋ ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฆ, ์ ์ฒด ๊ฐ๊ฒฉ์ด ์๋ชป๋์ด ์ผ์ฃผ์ผ ์์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๋ ๊ฒ์ "RRuleSet์ ์ฌ์ฉํ๊ณ dtstart๋ฅผ rdate๋ก ์ถ๊ฐ"ํ๋ ๊ฒ์ฒ๋ผ ๊ฐ๋จํ์ง ์์ต๋๋ค. ์ด ์ ํ์ ์์ ์์
์ด ํจ์ฌ ๋ ๋ง์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ธฐ๋ณธ์ ์ผ๋ก
dtstart
๋ ๋ค๋ฅธ ์์คํ ๊ณผ ๋ ์ผ๊ด์ฑ ์๊ฒ ํฌํจ๋์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.ํ์ฌ ๋์์ ๋ฏธ๋ฌํจ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ํ์ ๋ง๋ค์์ต๋๋ค. https://codepen.io/arshaw/pen/qwEQNO?editors=0010