Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème envoyer une date incomplète en BDD

symfony

    16 juin 2020 à 16:27:28

    Bonjour tout le monde,

    J'ai un problème sur des dates incomplètes

    j'ai utilisé sur symfony form l'input => datetime afin d'avoir 3 inputs dans mon formulaire,

    maintenant mon idée est que si dans l'input il n'y a rien qu'il soit transformé par des zéros 

    exemple : si on met que l'année 2020 en BDD : 2020-00-00

    mon problème est que le twig du formulaire n'accepte pas l'envoie, auriez-vous une idée comment le "tromper" ?

    merci pour votre temps 

    -
    Edité par PierreRichard78 16 juin 2020 à 18:31:31

    • Partager sur Facebook
    • Partager sur Twitter

    la chance sourit aux audacieux

      17 juin 2020 à 8:33:35

      Salut !

      Le souci est que 2020-00-00 n'est pas une date valide du point de vue de MySQL, et probablement même pas selon le format ISO…

      Cependant, ce dernier explique aussi comment doivent se comporter les ordinateurs face aux "dates partielles" (2020, 2020-06, 2020-W25) : la date représente le premier jour de la période concernée (2020-01-01 respectivement 2020-06-01, 2020-06-15). Donc pour ne pas perdre ce comportement sur le début, tu peux laisser les 01.
      Si en revanche cela doit désigner une période, pas vraiment de choix : il faut que tu aies de quoi spécifier la fin.

      Une autre possibilité serait de surcharger le bloc d'affichage du type datetime pour ajouter des options vides pour le mois et le jour, et prévoir un DataTransformer pour gérer les cas où toutes les parties ne sont pas renseignées (et calculer la fin de la période en fonction).

      • Partager sur Facebook
      • Partager sur Twitter
        17 juin 2020 à 9:35:39

        Salut Ymox,

        Merci pour ta réponse, 

        Je vois ce que tu veux dire. il était impossible de mettre des zéros j'ai donc modifier les options de ma bdd en enlevant ERROR_FOR_DIVISION_BY_ZERONO_ZERO_DATE

        Par exemple en mettant 1700-00-00 le retour dans le navigateur est 30/11/1699.

        Comment distingue t-on le 1er janvier 2020 (2020-01-01) de l'année 2020 (2020-01-01) ?

        Et que veux-tu dire par surcharger le bloc d'affichage du type datetime ?

        l'option vide engendre toujours les 01 ou 00 ?

        • Partager sur Facebook
        • Partager sur Twitter

        la chance sourit aux audacieux

          17 juin 2020 à 10:02:16

          Semper78Fidelis a écrit:

          Comment distingue t-on le 1er janvier 2020 (2020-01-01) de l'année 2020 (2020-01-01) ?

          Au niveau du traitement du formulaire, tu ne peux le faire à ma connaissance que dans un DataTransformer personnalisé si tu utilises le DateType, parce que c'est à mon avis le seul endroit où tu as accès à ce que l'utilisateur a vraiment rentré (et donc 2020, 2020-06 ou 2020-06-17). Reste à voir si tu n'as pas besoin d'un type personnalisé, je ne sais pas s'il est possible de supplanter le DataTransformer originel de DateType ni s'il est possible de lui faire accepter de n'avoir qu'une partie des champs de remplis.

          Quitte à me répéter : tu vas enregistrer 2020-01-01 pour toutes les variantes 2020, 2020-01 et 2020-01-01, il te faut donc une date de fin de période qui te permettra de faire tes calculs et manipulations plus facilement. Mais rien ne t'empêche de calculer cette date en même temps que tu regardes si tu n'as qu'une année, qu'un mois ou qu'un jour.

          Semper78Fidelis a écrit:

          Et que veux-tu dire par surcharger le bloc d'affichage du type datetime ?

          Symfony gère l'affichage des différents éléments de formulaire avec des blocs Twig que tu peux surcharger en cas de besoin.

          Semper78Fidelis a écrit:

          l'option vide engendre toujours les 01 ou 00 ?

          Je ne suis pas certain de comprendre la question — pour autant que c'en soit une.

          -
          Edité par Ymox 17 juin 2020 à 10:02:47

          • Partager sur Facebook
          • Partager sur Twitter
            17 juin 2020 à 10:30:26

            je comprends mieux, les dates c'est vraiment compliqué

            Exactement je cherche à donner la possibilité de remplir ce qu'on peut dans la date

            soit 2020-xx-xx mais aussi xxxx-05-xx etc... toutes possibilités et combler les trous 

            la BDD peut rentrer les zéros mais php ne peut pas l’interpréter 

            c'est très complexe, je me demande même s'il ne faut pas enlever le format datetime du champ et que je crée mon propre format mais avec x conditions ...

            • Partager sur Facebook
            • Partager sur Twitter

            la chance sourit aux audacieux

              17 juin 2020 à 10:37:14

              Ah, alors attention : une fréquence n'est pas une date, mais l'inverse est possible (une date est finalement quelque chose qui n'apparaît qu'une fois), donc peut-être que ton propre format serait plus pertinent. Là, tu me fais penser aux crontabs et leur format * * * * * (minute heure [jour du mois] mois [jour de la semaine]).

              • Partager sur Facebook
              • Partager sur Twitter
                17 juin 2020 à 11:48:02

                oui c'est très complexe, il faut définir qu'il y a d = entre 0 et 31 si m = 1 3 5 etc... ça serait super intéressant de le faire mais c'est le temps qui me manque ... ça m'étonne de ne pas trouver de bundle concernant les dates incomplètes
                • Partager sur Facebook
                • Partager sur Twitter

                la chance sourit aux audacieux

                problème envoyer une date incomplète en BDD

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown