J'ai un événement de calendrier récurrent qui se produit le 4e vendredi de chaque mois et je souhaite exclure 1 événement du vendredi. J'ai essayé EXDATE
mais EXDATE
une erreur
Échec de la transmission de JSON
Sans EXDATE
la règle fonctionne très bien.
Voici les détails que j'utilise dans le calendrier complet pour produire l'événement
{ start: "2019-07-06T09:00:00+10:00", end: "2019-07-06T15:00:00+10:00", rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;EXDATE=20190705T090000;INTERVAL=4;BYDAY=FR", title: "Weed Spraying", description: "June, Harry, Pat, George, Valda, Helen, Karen, Ken", color: "red", url: "./?action=detail_view&id=22", duration: "06:00" }
5 Réponses :
Je ne sais pas grand-chose sur ce format JSON particulier mais le EXDATE est une propriété, pas un paramètre de RRULE. S'il vous plaît essayez
rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;INTERVAL=4;BYDAY=FR\nEXDATE=20190705T090000"
Je ne vois pas en quoi cela est meilleur que le code de l'OP, ni pourquoi il serait valide. Je doute fortement que le format RRULE ait des caractères de nouvelle ligne ( \n
) comme séparateur accepté. Tout ce que vous avez fait est de remplacer ;
avec \n
dont je doute qu'elle soit valide. Je ne connais pas très bien le format, mais cela n'a pas l'air significatif. Pouvez-vous expliquer la différence entre une "propriété" et un "paramètre" dans RRULE, exactement?
OK, il semble que ce soit plus un problème rrule.js qu'un problème de calendrier complet. Le plugin rrule utilisé lève une erreur Propriété RRULE inconnue 'EXDATE'. Il le fait également sur la page de démonstration de rrule jakubroztocil.github.io/rrule si vous essayez d'entrer FREQ = WEEKLY; DTSTART = 20190607T090000; EXDATE = 20190705T090000; I NTERVAL = 4; BYDAY = FR comme chaîne de texte, vous obtenez la même Erreur.
@ADyson RRULE et EXDATE sont tous deux définis comme propriétés par RFC5545. Voir tools.ietf.org/html/rfc5545#section-3.8.5.3 et tools.ietf.org/html/rfc5545#section-3.8.5.1 pour leurs définitions respectives ainsi que tools.ietf.org/html/rfc5545#section -3.2 pour vous aider à comprendre de quoi il s'agit. Dans le message d'origine, le EXDATE devient un paramètre de RRULE au lieu d'une propriété à part entière. Ensuite, si vous regardez fullcalendar.io/docs/rrule-plugin, vous verrez que plusieurs propriétés peuvent être spécifiées dans la règle, séparées par \ n
Malheureusement, il semble que seule la propriété DTSTART puisse être spécifiée dans rrule et aucune propriété liée à la récurrence (EXDATE ou RDATE).
En regardant la documentation sur github.com/jakubroztocil/rrule , je suppose que je dois utiliser le constructeur RRuleSet ie. RRuleSet.prototype.exdate (dt) pour définir chaque EXDATE, mais je ne sais pas où faire cela dans le code fullCalendar
Il est possible d'ajouter des exceptions. Il vous suffit de formater correctement la chaîne RRule:
DTSTART:20190610T103000\nRRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20190801\nEXDATE:20190618T103000Z\nEXDATE:20190619T103000
Regardez ce bac à sable de code pour une démonstration
Le calendrier complet accepte également un objet au lieu d'une chaîne. Pouvez-vous donner un exemple de la façon dont nous le mettrons en œuvre sous cette forme avec plusieurs dates?
Attention, il y a actuellement un bogue dans le connecteur fullcalendar / rrule qui empêche plusieurs EXDATE de fonctionner correctement si vous fournissez les dates au format UTC (à la fin du Z). Voir github.com/fullcalendar/fullcalendar/issues/5726
OK je l'ai travaillé, @Arnaud a raison, RRULE, EXDATE et DTSTART sont des propriétés et non des paramètres de rrule, MAIS ils vont dans la propriété rrule pour FullCalendar avec un \ n newline, ils nécessitent également un: NOT =. Exemple
rrule: 'DTSTART:20190308T120000Z\nRRULE:FREQ=WEEKLY;UNTIL=20220330\nEXDATE:20190614T120000Z\nEXDATE:20190628T120000Z'
Remarquez qu'il existe 2 propriétés EXDATE, pour chaque date que vous souhaitez exclure, vous devez mettre un EXDATE. J'ai passé 3 jours à essayer de faire fonctionner cela, j'espère que cela aidera quelqu'un d'autre à gagner du temps.
Je vais supposer que cela vient de me faire gagner 3 jours. Je vous suis très reconnaissant.
Attention, il y a actuellement un bogue dans le connecteur fullcalendar / rrule qui empêche plusieurs EXDATE de fonctionner correctement si vous fournissez les dates au format UTC (à la fin du Z). Voir github.com/fullcalendar/fullcalendar/issues/5726
Mec, tu m'as fait gagner du temps et des nerfs!
@jiroch l'ajout du caractère 'Z' pour les datetimes RRule fonctionne désormais dans la version 5.4.0 github.com/fullcalendar/fullcalendar/issues/5726
Ce format peut également être utilisé pour plusieurs EXDATE:
rrule: "DTSTART:20201114T000000Z\nRRULE:FREQ=WEEKLY\nEXDATE:20201121T000000Z,20201128T000000Z"
Cette chaîne a été formatée à l'aide de rruleSet.exdate(new Date(Date.UTC(2012, 5, 1, 10, 30)))
de la bibliothèque rrule.js pour ajouter plusieurs EXDATE dans l'objet rrule puis en utilisant la méthode .toString()
Notez également que l'ajout du caractère 'Z' pour les heures de date RRule fonctionne désormais dans la v5.4.0
Dans la dernière version 5.4.0, le code suivant fonctionnera:
DTSTART: 20201101T040000Z RRULE: FREQ = WEEKLY; INTERVAL = 1; BYDAY = TU EXDATE: 20201110T040000Z, 20201124T040000Z
FullCalendar prend désormais en charge plusieurs exdate
J'ai utilisé RRule et RRuleSet pour produire la chaîne de règles: * REMARQUE: Vous devrez faire attention à l'heure d'été. C'est pourquoi j'ai dû m'ajuster plusieurs fois. Ne vous concentrez pas sur mon objet de date spécifique. Ceci est juste un exemple de la solution pour prendre en charge plusieurs exdates à l'aide de RRuleSet et RRule.
const rruleSet = new RRuleSet(); rruleSet.rrule(new RRule({ freq: Frequency.WEEKLY, interval: 1, byweekday: [RRule.TU], dtstart: new Date(2020, 10, 1, 0, 0, 0, 0) })); rruleSet.exdate(new Date(2020, 10, 9, 23, 0, 0, 0)); rruleSet.exdate(new Date(2020, 10, 23, 23, 0, 0, 0)); console.log(rruleSet.toString());
Voici le numéro du problème: https://github.com/fullcalendar/fullcalendar/issues/5726
Es-tu sûr de ça? Quand j'essaye d'analyser un RRULE avec un EXDATE, cela indique que EXDATE est une propriété invalide.
Lorsque j'enregistre la chaîne et que j'essaie d'utiliser le calendrier complet à un stade ultérieur, j'obtiens ce qui suit: Prop RFC non pris en charge EXDATE dans EXDATE: 20201109T210000Z, 20201123T210000Z. Fullcalendar ne peut pas analyser ces EXDATES à un stade ultérieur. Voir github.com/jakubroztocil/rrule/issues/335 et github.com/fullcalendar/fullcalendar/issues/4549
Utilisez RRuleSet et non RRule et assurez-vous que vous utilisez la version complète du calendrier 5.4.0