Development #27707
Filtre Django |days:"+2" pour ajouter/soustraire des jours à une date
0%
Description
Bientôt dans la doc !
Si je veux enlever trois jours à la date du jour, je souhaite pouvoir écrire today|days:"-3"
Historique
Mis à jour par Thomas Noël il y a plus de 5 ans
Ça serait plutôt quelque chose comme |add_days:"3" ; mais avant de lancer et un peu par curiosité, c'est quel usage ? Parce que pour les conditions, on utiliserait plutôt la notion d'âge (age_in_days) pour savoir si un truc aura lieu avant 2 jours, genre.
Mis à jour par Stéphane Laget il y a plus de 5 ans
- Ajouter 30 jours à une date :
date(form_var_date_envoi_devis) + days(30)
Mis à jour par Thomas Noël il y a plus de 5 ans
Je parlais vraiment juste du cas d'usage de "ajouter/soustraire des jours à une date" de ce ticket.
Mis à jour par Pierre Cros il y a plus de 5 ans
RTFM ! https://doc-publik.entrouvert.com/admin-fonctionnel/parametrage-avance/expressions/
Ça vous permettra vraisemblablement de voir que j'écris pas ce qu'il faudrait
|days:"+-XXX" va permettre de soustraire ou d'ajouter des jours à une date. Pour déclencher une action 2 jours avant une date particulière (vérifier qu'on est à deux jours ou moins d'une échéance), on écrira par exemple form_var_date|days:"-2"|parse_date >= today|parse_date : cette condition deviendra vraie deux jours avant la date de la variable, elle sera fausse jusqu'à -2 jours avant la date de la variable.
Pour vérifier que la date se situe à plus de 30 jours avant la date du jour, on écrira form_var_date|days:"+30"|parse_date <= today|parse_date : cette condition sera vraie si la date de la variable est inférieure de 30 jours ou plus à la date du jour, fausse sinon.
Mis à jour par Frédéric Péters il y a plus de 5 ans
form_var_date|days:"+30"|parse_date
Ça ne pourra pas être dans ce sens, on ajoutera 30 jours à une date, pas à un form_var_date dont on ne connait pas le type; plutôt donc form_var_date|parse_date|days:"+30".
Aussi, on préférera ajouter un nombre de jours, donc je dirais form_var_date|parse_date|days:30. (la syntaxe acceptera aussi days:+30 et days:-30, juste pas besoin des guillemets). Mais c'est un détail ici, ça ne m'ennuie pas d'également gérer la conversion de chaine en nombre ici.
Mis à jour par Thomas Noël il y a plus de 5 ans
Frédéric Péters a écrit :
form_var_date|days:"+30"|parse_date
Ça ne pourra pas être dans ce sens, on ajoutera 30 jours à une date, pas à un form_var_date dont on ne connait pas le type; plutôt donc form_var_date|parse_date|days:"+30".
Je me dis qu'on pourrait, comme pour le templatetags date, être rusé et jouer le parse_date si nécessaire (if not isinstance(value, (datetime.datetime, datetime.date, datetime.time)): value = parse_date(value)
). Un peu de magie ne fait pas de mal à ce niveau.
Aussi, on préférera ajouter un nombre de jours, donc je dirais form_var_date|parse_date|days:30. (la syntaxe acceptera aussi days:+30 et days:-30, juste pas besoin des guillemets). Mais c'est un détail ici, ça ne m'ennuie pas d'également gérer la conversion de chaine en nombre ici.
Yep.
Enfin, en relation avec #27709, je préférerai que le filtre se nomme « |addition_days » et qu'on ajoute en même temps « |substraction_days » qui sera plus facile à lire que « addition_days:"-2" »
Mis à jour par Frédéric Péters il y a plus de 5 ans
|days
|addition_days
Sûr, modulo que je suis pour que les opérations soient exprimées par des verbes, du coup |add_days. (j'ai un message plus long sur le sujet sur la liste).