Repository: zestedesavoir/zds-site

Issue:
Date de publication future des News
Bonjour,

Ça ne regarde certainement que moi mais...

![2019-08-03-073538_1920x1080_scrot](https://user-images.githubusercontent.com/2202307/62408818-98070c80-b5ce-11e9-9a0c-39bf3e585761.png)

C'est pas logique.  « Dans le futur » n'apporte **aucune information utile**. L’intérêt des news c'est d'avoir la date future, pour pouvoir géré et vérifier que la publication sera à la bonne date. Là, il faut ouvrir la news, et lire la date dans un format cryptique.

![2019-08-03-091429_1920x1080_scrot](https://user-images.githubusercontent.com/2202307/62408845-28dde800-b5cf-11e9-8dbd-c01a7fcaa46b.png)

Il y a certainement plus claire comme format.

C'est tellement compliqué qu'au final, j'écris juste tout dans un fichier ou sur un boue de papier.

Quand les 10 prochains contenus sont marqués « Dans le futur » franchement on a le sentiment d'être pris pour un crétin par l'IHM.

______________________


Bref, c'est géré par la fonction `format_date`.  
À votre avis comment on pourrait faire pour améliorer ça ?


Discussion:
Pour le format cryptique : des champs avec marqué Année, Jour, Mois et heure (éventuellement avec menu déroulant ?). Sinon pour l'IHM, je verrai bien : "Sera publié le `date|format_date`."
On peut enlever le format zds dans le template pour ne pas avoir dans le futur
@Vanadiae: En vrai, le format cryptique, j'abuse un peu. Je préfèrerais un format du style `now` ou `now+1d 10h11`. Ou simplement `10/12/2019 11h10` plutôt que `2019-12-10T11h10`. C'est pas une priorité ^^"

@A-312: J'ai pas bien compris mais ça à l'air intéressant !
Dans ton template tu as un [un filtre](https://github.com/zestedesavoir/zds-site/blob/1ec7094118f7c3f0149e1063f0572260373e7f36/zds/utils/templatetags/date.py) qui écrit "Dans le futur", il faut utiliser date au lieu de format_date
Oui donc, ce que tu proposes c'est de supprimer totalement le message « dans le futur » et de remplacer le code de la condition qui dis « quand la date est supérieur à la date courante ». Par un truc qui gère l'affichage de la date dans le futur.

Je pense que c'est ce qu'il y a de mieux. L'idéale serait de supporter les messages  « naturels » comme "dans 5s", "demain", "dans 2mois".
Si tu penses pareil je pense que je vais commencer à regarder comment on peut faire ça ^^
Rajoute un argument true/false pour la class ainsi que pour le filtre format_date ou crée un alias de ce filtre, du type format_date_strict.

Puis tu rajoute une condition avant de return "Dans le futur" pour savoir si on affiche "dans le futur" ou "demain" via naturaltime
```
@register.filter
def format_date_strict(value, small=False):
    """Format a date to an human readable string with futur support."""
    return date_formatter(value, tooltip=False, small=small, careFutur=true)
```
Nope du coup, je ne ferais pas ça.  
Soit je crée un wrapper, soit je modifie la fonction avec un argument optionnel. Pas les deux.

Le but c'est de modifier le moins possible le code existant. On ne change pas un code qui marche.
Du coup, je crois que finalement, je vais m’orienter vers un wrapper tout simple.
Rajouter une condition et un argument optionnel, c'est un coup à empêcher toute modification future.
Je ne comprends pas trop pourquoi tu veux tout réécrire alors qu'il suffit simplement d'ajouter un comportent supplémentaire pour ce passage : 

https://github.com/zestedesavoir/zds-site/blob/1ec7094118f7c3f0149e1063f0572260373e7f36/zds/utils/templatetags/date.py#L42

Resolving patch:
diff --git a/zds/featured/forms.py b/zds/featured/forms.py
--- a/zds/featured/forms.py
+++ b/zds/featured/forms.py
@@ -61,8 +61,8 @@ class Meta:
             '%Y-%m-%d', '%d/%m/%Y'  # day only
         ],
         widget=forms.DateTimeInput(
-            attrs={'placeholder': _('Exemple : 25/12/2016 10:00'), 'type': 'datetime-local'},
-            format='%Y-%m-%dT%H:%M'  # datetime field format
+            attrs={'placeholder': _('Exemple : 25/12/2016 10:00'), 'type': 'text'},
+            format='%d/%m/%Y %H:%M'  # datetime field format
         )
     )
 
diff --git a/zds/utils/templatetags/date.py b/zds/utils/templatetags/date.py
--- a/zds/utils/templatetags/date.py
+++ b/zds/utils/templatetags/date.py
@@ -20,7 +20,7 @@
 __ABS_HUMAN_TIME_FMT = _('%d %b %Y, %H:%M:%S')
 
 
-def date_formatter(value, tooltip, small):
+def date_formatter(value, tooltip, small, ignore_future=False):
     """
     Format a date to an human readable string.
 
@@ -38,7 +38,7 @@ def date_formatter(value, tooltip, small):
         now = datetime.now()
     now = now - timedelta(microseconds=now.microsecond)
 
-    if value > now:
+    if value > now and not ignore_future:
         return __DATE_FMT_FUTUR
     else:
         delta = now - value
@@ -52,10 +52,22 @@ def date_formatter(value, tooltip, small):
 
 @register.filter
 def format_date(value, small=False):
-    """Format a date to an human readable string."""
+    """
+    Format a date to an human readable string.
+    If ``value`` is in future it is replaced by "In the future".
+    """
     return date_formatter(value, tooltip=False, small=small)
 
 
+@register.filter
+def format_date_no_future(value):
+    """
+    Format a date to an human readable string.
+    If ``value`` is in future it is formatted as a normal date.
+    """
+    return date_formatter(value, tooltip=False, small=True, ignore_future=True)
+
+
 @register.filter
 def tooltip_date(value):
     """Format a date to an human readable string. To be used in tooltip."""


Test patch: