2
votes

EXDATE n'est-il pas inclus dans la règle du calendrier complet?

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"
}


0 commentaires

5 Réponses :


0
votes

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"


5 commentaires

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



2
votes

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


2 commentaires

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



3
votes

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.


4 commentaires

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



1
votes

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


0 commentaires

0
votes

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


3 commentaires

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