web-dev-qa-db-fra.com

Répétition personnalisée des événements récurrents iCalendar RRULE

J'essaie de créer 2 événements avec des répétitions personnalisées, mais je n'arrive pas à comprendre le codage.

  1. J'ai besoin d'un événement qui se produit tous les 30 jours, mais si le 30e jour est un week-end, j'aimerais que ce soit le lundi suivant. Mais J'en ai aussi besoin pour rester sur le cycle initial de 30 jours.

  2. J'ai aussi besoin d'un événement qui se passe x jours avant le x du mois. Par exemple, j'aimerais un événement qui se produit 3 jours avant le 15 de chaque mois.

Toute aide est la bienvenue.

3
sevenomad

Pour clarifier, je voulais dire écrire un programme qui crée un iCalendar, mais énumère les dates explicitement au lieu d'utiliser un RRULE.

Bien qu'il y ait plusieurs créateurs iCal en ligne, je ne pense pas qu'aucun d'entre eux gérera la complexité des règles dont vous avez besoin, en particulier la première.

Vous pourriez trouver une RRULE pour votre deuxième condition, mais j’ai trouvé plus facile de simplement écrire un programme.

Dans l’ensemble, bien que RRULE soit un bon outil, il ne peut pas tout faire. Parfois, il vous suffit de spécifier vous-même les dates, ce qui vous donne également plus de flexibilité pour utiliser d'autres formats de calendrier qui peuvent ne pas prendre en charge RRULE.

J'ai maintenant écrit:

https://github.com/barrycarter/bcapps/blob/master/STACK/bc-blank-ical.pl

et créé ces iCalendars vierges selon vos règles de date ci-dessus.

http://oneoff.barrycarter.info/webapps-90641-1.ics

http://oneoff.barrycarter.info/webapps-90641-2.ics

Notes IMPORTANTES:

  • Assurez-vous de vérifier mon travail: assurez-vous que les dates du calendrier sont celles que vous souhaitez réellement.

  • Pour votre première règle, j'ai arbitrairement supposé que le premier événement était le 1er février. Vous devriez Tweak mon programme pour générer la date correcte (ou contactez-moi (voir profil), et je peux le faire).

  • Pour votre deuxième règle, j'ai créé des événements de 2016 à 2037 inclus.

  • Pour utiliser ces calendriers, recherchez/remplacez toutes les instances de _SUMMARY_ par le récapitulatif de votre événement, toutes les instances de _DESCRIPTION_ par la description, etc. Les calendriers que j'ai créés ont uniquement des dates et des UID générés de manière aléatoire.

  • Vous devez également modifier le PRODID de chaque calendrier.

Personnellement, je ne m'y oppose pas, mais je ne suis pas sûr que cette question appartienne réellement aux applications Web, car elle ne concerne pas une application Web existante.

1
barrycarter

Pour le premier, pouvez-vous donner un exemple. Par exemple, voulez-vous qu'il passe au mois suivant si nécessaire?

Pour le second, je suggérerais le suivant x = 2

RRULE: FREQ = MENSUEL; BYDAY = MO, TU, WE, TH, FR; BYMONTHDAY = 10,11,12; BYSETPOS = -1

La règle est de dire que cela peut arriver:

  • 3 jours, 4 jours ou 5 jours avant le 15 (BYMONTHDAY=10,11,12)
    • 5 jours si le 3ème jour avant le 15 est un dimanche.
  • Aussi, vous dites que vos règles d'occurrence ne concernent que les jours de semaine BYDAY=MO,TU,WE,TH,FR
  • sur les options possibles dans un mois FREQ=MONTHLY;
  • cela prendra le dernier BYSETPOS=-1

Par exemple.:

  • si le 13 est un vendredi, la règle renverra le 13
  • si le 13 est un samedi, la règle renverra le 12
  • si le 13 est un dimanche, la règle renverra le 11
0
Auberon Vacher