ããã¯rruleã®åé¡ã§ã¯ãªããšæããŸãããrruleãã¿ã€ã ãŸãŒã³ã®ãµããŒãã«ã€ããŠã®ç§ã®ç解ããããŸãã rruleãšluxonã®ããã¥ã¡ã³ãã®é¢é£ã»ã¯ã·ã§ã³ããã§ã«èªã¿ãŸããã
const { RRule, RRuleSet } = require(`rrule`);
const dtstart = new Date();
console.log(`dtstart`, dtstart);
const firstHour = dtstart.getHours();
const secondHour = (firstHour + 2) % 24;
const getRRule = options => new RRule(Object.assign({}, options, {
freq: RRule.DAILY,
count: 1,
dtstart,
byminute: 0,
bysecond: 0
}));
const showNextInstance = tzid => {
const ruleSet = new RRuleSet();
ruleSet.rrule(getRRule({ tzid, byhour: firstHour }));
ruleSet.rrule(getRRule({ tzid, byhour: secondHour }));
console.log(tzid, ruleSet.after(dtstart));
};
showNextInstance(undefined);
showNextInstance(`UTC`);
showNextInstance(`local`);
showNextInstance(`America/Chicago`);
dtstart 2019-04-05T11:51:23.744Z
undefined 2019-04-06T06:00:00.744Z
UTC 2019-04-06T06:00:00.744Z
local 2019-04-06T06:00:00.744Z
America/Chicago 2019-04-06T06:00:00.744Z
tzid
ã¯åºåã«äœããã®åœ±é¿ãäžãããšæããŸãããåã¿ã€ã ãŸãŒã³ã§åãåºåãçæãããŸãã
ãŸããã«ãŒã«ã§æå®ãããæéãšæ¬¡ã®ã€ãã³ãã€ã³ã¹ã¿ã³ã¹ã®åºåãšã®çžé¢é¢ä¿ãããããŸããã 次ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãæå®ãããdtstart
ãštzid
å€ãã©ã®ããã«è§£éãŸãã¯é©çšããããã«å¿ããŠãæäŸãããã«ãŒã«ã«ãã£ãŠè¡šããã2æéã®ãã¡ã®1ã€ã«ã»ãŒå¯Ÿå¿ãããšäºæ³ããŸãã
2.6.0
OS X 10.14.2ãããŒã8.11.4
$ date
Fri Apr 5 06:32:33 CDT 2019
ç§ãã²ã©ãæ··ä¹±ããŠããŸãã
ããããŸãããReadmeã«æ¬¡ã®éèŠãªæ®µèœããããŸããã
ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«ã¯ãããã2ã€ã®ãã«ããŒæ©èœã䜿çšããå¿ èŠããããŸãã tzidããµããŒãããããã«ãããå€æŽããå Žåã¯ããªãã»ãããå€æŽããŠXã¿ã€ã ãŸãŒã³ã®ãªãã»ãããååŸããå¿ èŠããããŸãã
/**
* Mutates date. Add timezone to the date.
*
* <strong i="9">@param</strong> {Date} [date]
*/
export function localizeDate(date = new Date()) {
const offset = new Date().getTimezoneOffset() * 60 * 1000; // get offset for local timezone (can modify here to support tzid)
date.setTime(date.getTime() - offset);
return date;
}
/**
* Mutates a date. De-timezones a date.
*
* <strong i="10">@param</strong> {Date} [date]
*/
export function utcifyDate(date = new Date()) {
const offset = new Date().getTimezoneOffset() * 60 * 1000; // get offset for local timezone (can modify here to support tzid)
date.setTime(date.getTime() + offset);
return date;
}
次ã«ãã³ãŒãã¯æ¬¡ã®ããã«å€æŽãããŸãã
const { RRule, RRuleSet } = require(`rrule`);
const dtstart = localizeDate(new Date());
console.log(`dtstart`, utcifyDate(new Date(dtstart))); // even though it is utc string, this is the local time
const firstHour = dtstart.getUTCHours();
const secondHour = (firstHour + 2) % 24;
const getRRule = options => new RRule(Object.assign({}, options, {
freq: RRule.DAILY,
count: 1,
dtstart,
byminute: 0,
bysecond: 0
}));
const showNextInstance = tzid => {
const ruleSet = new RRuleSet();
ruleSet.rrule(getRRule({ byhour: firstHour })); // remove tzid as i dont support this
ruleSet.rrule(getRRule({ byhour: secondHour })); // removed tzid as i dont support this
console.log('local:', utcifyDate(ruleSet.after(dtstart));
};
showNextInstance(undefined);
showNextInstance(`UTC`);
showNextInstance(`local`);
showNextInstance(`America/Chicago`);
JSã®çŽããããäžèŠåãªDate
å®è£
ã«åºã¥ããŠæ§ç¯ãããŠããããããã®ã©ã€ãã©ãªã§ã¯ãããåé¿ããè¯ãæ¹æ³ã¯ãªãã®ã§ã¯ãªãããšæããŸãã ç§ã¯çŸåšå®å
šãªæžãçŽãã«åãçµãã§ããŸããããããæ£ããããã®ã«å°ãæéãããããŸãã
ããããšã@davidgoliããªãã®ä»äºã¯ãšãŠãæè¬ããŠããŸã!!!
ä»ã®äººãäžèŠåãªæ¥ä»ã®å®è£ ãç解ããã®ãå©ããããã«èšäºãæžãããšãç解ããŠãã誰ããå¿ èŠã ãšæããŸãã æ£çŽãªãšããããŸã ããããŸãããããŸããããŸã§èª¿æŽããŸããã
ããã¯ãã³ã³ãœãŒã«ã«åºåããè¿ãããæ¥ä»ãæååã«å€æãããJavaScriptã®æ¥ä»ã§ãããJavaScriptãUTCã§ã³ã³ãœãŒã«ã«æ¥ä»ãèªåçã«åºåããããã§ãïŒã¿ã€ã ã¹ã¿ã³ãã®æ«å°Ÿã«ãããZããåç §ããŠãã ããããŒããªãã»ããïŒã 4ã€ã®ã±ãŒã¹ã®ããããã§ã®æ¬¡ã®çºçã¯ïŒç°ãªãã¿ã€ã ãŸãŒã³ã§ã¯ãããŸããïŒãŸã£ããåæã«çºçããŠããããããŸã£ããåãã¿ã€ã ã¹ã¿ã³ãã4ååºåãããŸãã
ãŸããJavaScript Date
ãªããžã§ã¯ãã¯ã1970幎1æ1æ¥æšææ¥ã®00:00:00 UTCããçµéããããªç§æ°ã䜿çšããŠæéã远跡ããããšã«æ³šæããŠãã ããïŒãUTCãã«æ³šæããŠãã ããïŒã ã12:34:56 pmããªã©ã®æååã®è§£éã
@davidgoli
ç§ã¯çŸåšå®å šãªæžãçŽãã«åãçµãã§ããŸããããããæ£ããããã®ã«å°ãæéãããããŸãã
rScheduleã®ãœãŒã¹ã確èªããããšããèŠããæµ®åUTCæ¥ä»ã«å€æããç¹å¥ãªDateTime
ãªããžã§ã¯ãïŒLuxonããã§ã¯ãªãïŒã䜿çšããŠè¡ãããŸãã å埩ã¯ãã®UTCæ¥æã§è¡ããããããDSTã¯åé¡ã«ãªããŸããã ãªã«ã¬ã³ã¹ãèŠã€ãã£ãåŸããŠãŒã¶ãŒã«æž¡ãããåã«ãé©åãªã¿ã€ã ãŸãŒã³ã§éåžžã®æ¥ä»ã«å€æãããŸãã
äŸïŒãã®æ¥ä»
import { DateTime as LuxonDateTime } from 'luxon';
const date = LuxonDateTime.fromObject({
year: 2019,
month: 1,
day: 1,
zone: 'America/Los_Angeles'
})
ãã®UTCæ¥ä»ã«å€æãããã¿ã€ã ãŸãŒã³ãä¿åãããŸã
const fakeDate = Date.UTC(2019, 0, 1)
const fakeDateZone = 'America/Los_Angeles'
ãã®UTCæ¥ä»ã¯Luxonæ¥ä»ã«äŒŒãŠããŸããïŒã©ã¡ãã2019/1/1
ããã«èŠããŸãïŒãç°ãªãã¿ã€ã ãŸãŒã³ã«ãããããå®éã«ã¯åãæå»ãè¡šããŠããªãããšã«æ³šæããŠãã ããã
ããã¯èšã£ãŠãããã®ç¹å¥ãªãUTCãæ¥ä»ã§ç¹°ãè¿ãããšã§ãå€æéãæ°ã«ããã«ç¹°ãè¿ãããšãã§ããŸãã æ£ããæ¥ä»ãèŠã€ãã£ãããã«ã¯ãœã³ã®æ¥ä»ã«æ»ãããšãã§ããŸãã
äŸãã°ïŒ
LuxonDateTime.fromObject({
year: fakeDate.year,
month: fakeDate.month,
day: fakeDate.day,
zone: fakeDateZone,
})
ããã«ãããä»»æã®ã¿ã€ã ãŸãŒã³ããµããŒãããªãããå埩ããžãã¯ãUTC察å¿ã«ä¿ã€ããšãã§ããŸãã
@thefliikããªããã£ããããŠã³ãããŸããã ããã§ã®æ¬åœã®é çã®çš®ã¯æ°é±éã§ãã rscheduleãïŒãããŸã§ã®ãšããïŒbyweeknoãšbysetposã®ãµããŒãã§ãã³ãããŠããããã§ãã...
ãããããã ã byweekno
ã¯éåžžã«è¿·æã§ãã
é£çµ¡ãã£ãïŒ
ç§ã¯ãããã§conflateã®åé¡ã«ã¯ç°¡åã ãšæãDate
ãªããžã§ã¯ããšåé¡ã®çºçãèšç®ããRRULE
ç§ã¯2ã€ãçµã¿åãããåã«ãåå¥ã«ãããã«ã€ããŠã®è©±ãããã€ããã§ãã®ã§ãã ç§ã¯ãããã»ãšãã©æžãçããªããã°ãªããªãã£ãã®ã§ãåé¡ã®ç解ãæŽçããä»ã®äººã«åœ¹ç«ã€å Žåã«åããŠããã«æçš¿ããããšã«ããŸããã
JS Date
ãªããžã§ã¯ããäžèŠåã§ããããšã«åæããŸãããããªããžã§ã¯ãã«ã¯ãããã誀解ãããããã®ããã«èŠããŸãã æ§ããã«èšã£ãŠãæ··ä¹±ããŸãã
@ hlee5zebraã§è¿°ã¹ãããã«ã Date
ã³ã³ã¹ãã©ã¯ã¿ãŒã§äœæãããæ¥ä»ã¯åžžã«UTCã§è¡šãããŸãã ãããã¯çŸå°æéã§è¡šç€ºãããå ŽåããããŸãããèå°è£ã§ã¯å®éã«ã¯Unixãšããã¯æéã§è¡šãããŸãã ã€ã³ã¹ã¿ã³ã¹åãããDate
ãªããžã§ã¯ãã«å¯ŸããŠãã€ã§ã.getTime()
ãŸãã¯.toISOString()
ããŠãUTCã§äœæ¥ããŠããããšãæãåºãããããšãã§ããŸãã
å®è£
ã¯ãUTCã§ãã¹ãŠã®åŠçãå®è¡ãããŠãŒã¶ãŒã«è¡šç€ºãããçŸå°æéã«ã®ã¿å€æãããšããèŠåã«ãæ£ããæºæ ããŠããŸãã ããŸããŸãéçºè
ã§ããç§ãã¡ããŠãŒã¶ãŒã§ãã ãããããããç§éã¯æ°Žãæ¿ãããç§éèªèº«ã®ãŠãŒã¶ãŒã念é ã«çœ®ããŠããŸãã ã¢ããªãéçºãããšãã¯ãèŠåã«åŸããããã¯ãšã³ãã§æ¥ä»ãUTCãšããŠä¿åããå¿
èŠããããŸãïŒJSã¯ãã§ã«UTCã§æ¥ä»ãåŠçããŠããã®ã§ãããã§åé¡ãããŸããïŒã æ¥ä»ãUTCãšããŠããŒã¿ã¹ãã¢ã«ä¿åããå Žåãæ¥ä»ã¯ISOæååãšããŠã¯ã©ã€ã¢ã³ãã«å°çãã Date
ãªããžã§ã¯ãã«ãã£ãŠæ£ãã解æããããŠãŒã¶ãŒã®çŸå°æéã«è¡šç€ºãããå¿
èŠããããŸãã
ãã®èšäºã¯ã Date
ãªããžã§ã¯ããç解ããããã䜿ã£ãŠã©ãã ãã§ããããçºèŠããã®ã«åœ¹ç«ã¡ãŸããïŒ https ïŒ
RRULE
ãªã«ã¬ã³ã¹ã®èšç®ã¯ããŠãŒã¶ãŒã®æåŸ
ãšUTCã§ã®æ¥ä»ã®åŠçã«æ ¹æ¬çãªéããããããã泚æãå¿
èŠã§ããããã2ã€ã®æéè¡šçŸã1æ¥ã®éå£ãè¶
ãããšé¡èã«ãªããŸãã
ããšãã°ããŠãŒã¶ãŒãæ¯é±ç«ææ¥ã«çºçããåçºãåžæããå ŽåããŠãŒã¶ãŒã¯ãã¹ãŠã®çºçãçŸå°æéã®ç«ææ¥ã«çºçããããšãæåŸ
ããŸãã ãã ãããã¹ãŠã®èšç®ã¯UTCã§è¡ãããããã RRULE
ããã«ãªããŸãã
DTSTART:2019-10-29T00:02:26Z
RRULE:FREQ=WEEKLY;BYWEEKDAY=TU
UTCã®ç«ææ¥ã«ãªã«ã¬ã³ã¹ãè¿ããŸãããæ¬åååç·ã®ããªã西ã«äœçœ®ãããŠãŒã¶ãŒã®å Žåããªã«ã¬ã³ã¹ã¯çŸå°æéã®æææ¥ã«è¡šç€ºãããŸããããã¯æããã«ã誰ããæãã§ããçµæã§ã¯ãããŸããã
ãšã¯ãããããã解決ããããã«éçºè
ãããªããã°ãªããªãããšã¯ãJavaScriptã«ããŒã«ã«æ¥ä»ãå®éã«ã¯UTCæ¥ä»ã§ãããšèãããããã®ãåœã®ãæ¥ä»ãrrule.js
ã«äžããã©ã€ãã©ãªã«èšç®ãè¡ãããããšã§ãããã®ããŒã«ã«UTCæéã .all()
ã¡ãœãããããªã«ã¬ã³ã¹ãååŸãããããããã®æ¥ä»ã®ãUTCãéšåã䜿çšããŠãæ°ããDate
ãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããŸãã ããã«ãããçµæãæåŸ
ã©ããã«ãªããŸãã
import { RRule } from 'rrule'
const dtstart = new Date('2019-10-29T00:02:26Z') // same as: `new Date(Date.UTC(2019, 9, 29, 0, 2, 26))`
console.log(dtstart.toISOString()) // 2019-10-29T00:02:26.000Z
console.log(dtstart) // Mon Oct 28 2019 17:02:26 GMT-0700 (Pacific Daylight Time)
const fakeDateStart = setPartsToUTCDate(dtstart)
console.log(fakeDateStart.toISOString()) // 2019-10-28T17:02:26.000Z
console.log(fakeDateStart) // Mon Oct 28 2019 10:02:26 GMT-0700 (Pacific Daylight Time)
const rule = new RRule({
freq: RRule.WEEKLY,
byweekday: [RRule.TU],
count: 2,
dtstart: fakeDateStart
})
const localUTCOccurrences = rule.all()
console.log(localUTCOccurrences.map(toISOString)) // ["2019-10-29T17:02:26.000Z", "2019-11-05T17:02:26.000Z"]
console.log(localUTCOccurrences) // [Tue Oct 29 2019 10:02:26 GMT-0700 (Pacific Daylight Time), Tue Nov 05 2019 09:02:26 GMT-0800 (Pacific Standard Time)]
const occurrences = localUTCOccurrences.map(setUTCPartsToDate)
console.log(occurrences.map(toISOString)) // ["2019-10-30T00:02:26.000Z", "2019-11-06T01:02:26.000Z"]
console.log(occurrences) // [Tue Oct 29 2019 17:02:26 GMT-0700 (Pacific Daylight Time), Tue Nov 05 2019 17:02:26 GMT-0800 (Pacific Standard Time)]
function setPartsToUTCDate(d) {
return new Date(
Date.UTC(
d.getFullYear(),
d.getMonth(),
d.getDate(),
d.getHours(),
d.getMinutes(),
d.getSeconds()
)
)
}
function setUTCPartsToDate(d) {
return new Date(
d.getUTCFullYear(),
d.getUTCMonth(),
d.getUTCDate(),
d.getUTCHours(),
d.getUTCMinutes(),
d.getUTCSeconds()
)
}
function toISOString(d) {
return d.toISOString()
}
https://codesandbox.io/s/rrule-localutc-conversion-zxlki
ãŸãã¯èŠããã«ïŒ
import { RRule } from 'rrule'
const date = new Date('2019-10-29T00:02:26Z')
const rule = new RRule({
freq: RRule.WEEKLY,
byweekday: [RRule.TU],
count: 2,
dtstart: setPartsToUTCDate(date)
})
const occurrences = rule.all().map(setUTCPartsToDate)
https://codesandbox.io/s/rrule-localutc-conversion-in-short-ez7g0
ç§ãèŠãéããChromeãFirefoxãSafariã¯ãã¹ãŠãã³ã³ãœãŒã«ã«ãã°ã€ã³ãããšãã«çŸå°æéã®æååãšããŠæ¥ä»ã衚瀺ããUTCã®ISOæååãšããŠNode.jsã衚瀺ããŸãã
@ tim-phillipsç§ãä»ããã«èŠããã§ããŠããããåé¿ããããã®ããçš®ã®ã¢ã³ããŒããããæ¢ããŠããŸãã
æ±éšæšæºæååŸ8æã«å®æçãªã€ãã³ãããããæ£åžžã«æ©èœããŠããŸãããæ±éšæšæºæååŸ9æã¯ãæ¬æ¥ããã¹ãåæ¥ã«ãããæŒãæ»ããŠããŸãã
ããªããããã«å¯ŸããçããèŠã€ããããšãã§ãããã©ããèŠãã®ã楜ãã¿ã«ããŠããŸãã
@ tim-phillipsã¯åªããå èš³ã§ãã ãŸã ãŸã æ€èšäžã§ãããããããç解ã§ããããã«ãªããŸããã®ã§ããããããé¡ãããŸãïŒ
@ tim-phillipsåæããããšãããããŸãã
ãããã次ã®ããšã説æã§ããŸããïŒ ã³ã³ãã¥ãŒã¿ã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«ãã£ãŠã¯ããœãªã¥ãŒã·ã§ã³ãæ°Žææ¥ã«æ»ãå¯èœæ§ãããããã§ãã
@tonylauã¯ãã³ã³ãœãŒã«ã§æåååãããåºåã確èªããŸãããããã¯ãåžžã«ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æãããŸãã getUTC*()
ã¡ãœããã䜿çšããŠæ¥ä»ã®äžéšãååŸããå¿
èŠããããŸããããã¯ãããŒã«ã«ã¿ã€ã ãŸãŒã³ã«é¢ä¿ãªãåãã«ãªããŸãã
@davidgoli
ã¿ã€ã ãŸãŒã³ãUTC + 14ïŒããªã¹ã£ãã¹ã£å³¶/ã©ã€ã³è«žå³¶æéïŒã«èšå®ãããšãgetUTCDayïŒïŒã䜿çšããŠããå Žåã§ãã次ã®ããã«ãªããŸãã ãã®æ¥ã¯ãŸã ç«ææ¥ã«ãªãã¯ãã®æ°Žææ¥ãšããŠè¿ãããŸããïŒ
ãµã³ãããã¯ã¹ïŒ https ïŒ
ãã®ãã£ã¹ã«ãã·ã§ã³ã«é¢é£ããå¯èœæ§ããããŸãïŒ https ïŒ
@ tim-phillipsããããšã!!!!!!!!!! ããã¯ãšãŠã圹ã«ç«ã¡ãŸãã!!!!!!! rruleã§icãäœæããæ¹æ³ãç¥ã£ãŠããŸããïŒ ããŒãã§icsããã±ãŒãžã䜿çšãããšãåã³æ¥ã®åé¡ãçºçããŸããã«ã¬ã³ããŒã®æåŸ ç¶ãåãåããšãäŒæ¥ã«ãªããŸãã ïŒããããããªãã®ã³ãŒãã®ãããã§ããã¹ãŠãæ£ããããŒã¿ããŒã¹ã«å ¥ããããšãã§ããŸã!!ã©ããããããšãããããŸãããïŒ
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯ãããã§conflateã®åé¡ã«ã¯ç°¡åã ãšæã
Date
ãªããžã§ã¯ããšåé¡ã®çºçãèšç®ããRRULE
ç§ã¯2ã€ãçµã¿åãããåã«ãåå¥ã«ãããã«ã€ããŠã®è©±ãããã€ããã§ãã®ã§ãã ç§ã¯ãããã»ãšãã©æžãçããªããã°ãªããªãã£ãã®ã§ãåé¡ã®ç解ãæŽçããä»ã®äººã«åœ¹ç«ã€å Žåã«åããŠããã«æçš¿ããããšã«ããŸãããJavaScriptã®æ¥ä»ãªããžã§ã¯ã
JS
Date
ãªããžã§ã¯ããäžèŠåã§ããããšã«åæããŸãããããªããžã§ã¯ãã«ã¯ãããã誀解ãããããã®ããã«èŠããŸãã æ§ããã«èšã£ãŠãæ··ä¹±ããŸãã@ hlee5zebraã§è¿°ã¹ãããã«ã
Date
ã³ã³ã¹ãã©ã¯ã¿ãŒã§äœæãããæ¥ä»ã¯åžžã«UTCã§è¡šãããŸãã ãããã¯çŸå°æéã§è¡šç€ºãããå ŽåããããŸãããèå°è£ã§ã¯å®éã«ã¯Unixãšããã¯æéã§è¡šãããŸãã ã€ã³ã¹ã¿ã³ã¹åãããDate
ãªããžã§ã¯ãã«å¯ŸããŠãã€ã§ã.getTime()
ãŸãã¯.toISOString()
ããŠãUTCã§äœæ¥ããŠããããšãæãåºãããããšãã§ããŸããå®è£ ã¯ãUTCã§ãã¹ãŠã®åŠçãå®è¡ãããŠãŒã¶ãŒã«è¡šç€ºãããçŸå°æéã«ã®ã¿å€æãããšããèŠåã«ãæ£ããæºæ ããŠããŸãã ããŸããŸãéçºè ã§ããç§ãã¡ããŠãŒã¶ãŒã§ãã ãããããããç§éã¯æ°Žãæ¿ãããç§éèªèº«ã®ãŠãŒã¶ãŒã念é ã«çœ®ããŠããŸãã ã¢ããªãéçºãããšãã¯ãèŠåã«åŸããããã¯ãšã³ãã§æ¥ä»ãUTCãšããŠä¿åããå¿ èŠããããŸãïŒJSã¯ãã§ã«UTCã§æ¥ä»ãåŠçããŠããã®ã§ãããã§åé¡ãããŸããïŒã æ¥ä»ãUTCãšããŠããŒã¿ã¹ãã¢ã«ä¿åããå Žåãæ¥ä»ã¯ISOæååãšããŠã¯ã©ã€ã¢ã³ãã«å°çãã
Date
ãªããžã§ã¯ãã«ãã£ãŠæ£ãã解æããããŠãŒã¶ãŒã®çŸå°æéã«è¡šç€ºãããå¿ èŠããããŸãããã®èšäºã¯ã
Date
ãªããžã§ã¯ããç解ããããã䜿ã£ãŠã©ãã ãã§ããããçºèŠããã®ã«åœ¹ç«ã¡ãŸããïŒ https ïŒã«ãŒã«
RRULE
ãªã«ã¬ã³ã¹ã®èšç®ã¯ããŠãŒã¶ãŒã®æåŸ ãšUTCã§ã®æ¥ä»ã®åŠçã«æ ¹æ¬çãªéããããããã泚æãå¿ èŠã§ããããã2ã€ã®æéè¡šçŸã1æ¥ã®éå£ãè¶ ãããšé¡èã«ãªããŸããããšãã°ããŠãŒã¶ãŒãæ¯é±ç«ææ¥ã«çºçããåçºãåžæããå ŽåããŠãŒã¶ãŒã¯ãã¹ãŠã®çºçãçŸå°æéã®ç«ææ¥ã«çºçããããšãæåŸ ããŸãã ãã ãããã¹ãŠã®èšç®ã¯UTCã§è¡ãããããã
RRULE
ããã«ãªããŸããUTCã®ç«ææ¥ã«ãªã«ã¬ã³ã¹ãè¿ããŸãããæ¬åååç·ã®ããªã西ã«äœçœ®ãããŠãŒã¶ãŒã®å Žåããªã«ã¬ã³ã¹ã¯çŸå°æéã®æææ¥ã«è¡šç€ºãããŸããããã¯æããã«ã誰ããæãã§ããçµæã§ã¯ãããŸããã
ãããæ£ãããã
ãšã¯ãããããã解決ããããã«éçºè ãããªããã°ãªããªãããšã¯ãJavaScriptã«ããŒã«ã«æ¥ä»ãå®éã«ã¯UTCæ¥ä»ã§ãããšèãããããã®ãåœã®ãæ¥ä»ã
rrule.js
ã«äžããã©ã€ãã©ãªã«èšç®ãè¡ãããããšã§ãããã®ããŒã«ã«UTCæéã.all()
ã¡ãœãããããªã«ã¬ã³ã¹ãååŸãããããããã®æ¥ä»ã®ãUTCãéšåã䜿çšããŠãæ°ããDate
ãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããŸãã ããã«ãããçµæãæåŸ ã©ããã«ãªããŸããhttps://codesandbox.io/s/rrule-localutc-conversion-zxlki
ãŸãã¯èŠããã«ïŒ
https://codesandbox.io/s/rrule-localutc-conversion-in-short-ez7g0
ç§ãèŠãéããChromeãFirefoxãSafariã¯ãã¹ãŠãã³ã³ãœãŒã«ã«ãã°ã€ã³ãããšãã«çŸå°æéã®æååãšããŠæ¥ä»ã衚瀺ããUTCã®ISOæååãšããŠNode.jsã衚瀺ããŸãã