web-dev-qa-db-fra.com

Erreur de rendu du champ de calendrier "Spécification de fuseau horaire double"

dans mon composant personnalisé, j'ai un champ de calendrier que je rends dans ma vue.

champ de base de données:

Nom: estEventDate Type: date Null: Non Par défaut: 0000-00-00

champ XML:

<field name="estEventDate" type="calendar"   
  format="%Y-%m-%d"
  todaybutton="false"
  filltable="false"
  showtime="false"
  size="22"
  class="validate-dates uk-input"
  minyear="0"/>

Le fichier php tmpl/default.php

<div>
  <?php echo $this->form->renderField('estEventDate'); ?>
</div>

L'erreur est la suivante: 0 DateTime :: __ construct (): Échec de l'analyse de la chaîne temporelle (-1-11-30) à la position 5 (-): Spécification de fuseau horaire double

Et dans le journal, j'ai ce qui suit:

error   Uncaught \Throwable of type Exception thrown. Stack trace: 
#0 /home/mike/joomla/libraries/src/Date/Date.php(112): DateTime->__construct('-1-11-30', Object(DateTimeZone))
#1 /home/mike/joomla/libraries/src/Factory.php(548): Joomla\CMS\Date\Date->__construct('-1-11-30', Object(DateTimeZone))
#2 /home/mike/joomla/libraries/joomla/form/fields/calendar.php(238): Joomla\CMS\Factory::getDate('-1-11-30', 'UTC')
#3 /home/mike/joomla/libraries/src/Form/FormField.php(975): JFormFieldCalendar->getInput()
#4 /home/mike/joomla/libraries/src/Form/Form.php(670): Joomla\CMS\Form\FormField->renderField(Array)
#5 /home/mike/joomla/components/com_contract/views/contract/tmpl/edit_admin.php(95): Joomla\CMS\Form\Form->renderField('estEventDate')

J'ai essayé différentes options dans le XML. (comme le format, translateformat, etc.) J'ai également fixé une date directement dans la base de données (je pensais que le problème pouvait peut-être être lié à '0000-00-00')

Joomla v. 3.9.0/php 7.2

2
mixahlos

Ma suggestion serait, changez simplement le champ de base de données en varchar ou le texte pour enregistrer ce champ de formulaire et l'erreur devrait alors disparaître. Ensuite, vous pouvez récupérer les valeurs de date de format de chaîne de la base de données lorsque vous en avez besoin et vous pouvez créer tout format de sortie de format date/date/heure à partir de la date de chaîne que vous obtenez de la base de données. Je suggère cela, car avec le rendu du champ de formulaire, il n’ya aucun problème fondamental comme je le vois. Et j'ose aussi suggérer cela, car dans les paramètres du plug-in (dans le tableau des extensions), les champs de date sont également également enregistrés dans les champs de base de données texte et ce n'est pas un gros problème dans Joomla. Et enfin, de cette façon, vous pouvez également repérer dans la chaîne de date de la base de données si le format de date enregistré n'est pas un format de date valide. Ainsi, vous pouvez réparer.

Ou, en restant à la date ou au champ date/heure dans la base de données, de la définition du champ xml, je supprimerais la définition de l'attribut format = "% Y-% m-% d", car cela pourrait aussi causer cette erreur (je vérifierai également cela sous mes formes).

MISE À JOUR COURTE VERS TROUVER LA VRAIE CAUSE DE CE PROBLÈME (juste pour les chercheurs ultérieurs)

@mixahlos a trouvé la solution finale au problème détaillé ci-dessus, mais pour moi, la cause du mauvais format de date restait encore un peu obscure. Quelques points importants résumés et une sorte de liste de contrôle sur cette question/problème:

1. Le champ de date est en fait un champ de texte simple à saisir avec un assistant de saisie du calendrier.

2. Le même problème est apparu dans le composant K2 il y a un peu plus d'un an, en raison d'un code d'entrée de calendrier javascript obsolète utilisé dans K2. Cela a provoqué un conflit lors de la saisie de la date. Dans ce cas particulier, ce n'était pas le problème.

. @mixahlos a retracé le problème de création du même formulaire avec la même date. Champs dans une installation claire de Joomla où il a repéré le problème de formatage de base de la date lorsqu'il a tenté de récupérer les données du champ de date du base de données. Ensuite, dans son code, il a supprimé les données inutiles dans son PHP (dans un contrôleur Joomla personnalisé)), ce qui a résolu le problème initial. Il peut désormais sauvegarder les dates sans problème dans les champs de base de données de type date .

J'espère que cela pourra aider un peu plus tard des personnes aux prises avec des problèmes similaires. Au moins avec peu d’approches pour traiter ce problème.

2
Zollie