Problème de date dans MySQL

Bonjour,
J’aimerais savoir pourquoi l’affichage des dates dans Jeedom est au format américain YYYY-MM-DD alors que l’environnement système est en français (locale = fr_FR)
Pourquoi ne pas afficher la date au format DD-MM-YYYY ?
Raison, j’ai ce message :

[01-02-2024 17:08:00][ERROR] : Erreur sur la fonction cron du plugin : [MySQL] Error code : 22007 (1292). Incorrect datetime value: '18-01-2024 00:00:00' for column `jeedom`.`history`.`datetime` at row 1  : REPLACE INTO history 		SET cmd_id=:cmd_id, 		`datetime`=:datetime, 		value=:value

Si quelqu’un a une idée, merci pour toute solution.

Bonjour,

justement pour éviter ce genre d’erreur:

car là sans autre info ca va être interprété comme la 01 jour du mois 18 2024; mois 18 n’existe pas => erreur

Désolé, je ne saisi pas la logique. Y a 3 champs Jour/Mois/année de renseignés tout le temps.
Je me trompe ?

La question n’est pas qu’il y aie 3 champs de renseignés ou pas.

La question est que des fonctions dans les langages de programmation sont souvent tributaires de paramètres passés à l’anglosaxon.

Donc comme le dit Mips dans le log fournit ç a foire car la date passée à la française est interprétée 01 jour du mois 18 2024

Oui vous vous trompez.
Sans autre info quasi tout système va interpréter une date au format xx-xx-xxxx comme MM-DD-YYYY (format américain) et pas comme DD-MM-YYYY
d’où l’intérêt du format xxxx-xx-xx (année au début) car là avec un nombre sur 4 chiffres, le système sait tout seul que ca correspond à YYYY-MM-DD

2 « J'aime »

Merci pour les réponses. Je vais déboguer le fichier PHP en question pour voir ce qu’il fait.

Hello,

En base de données, le format de donnée du type « datetime » est toujours en YYYY-MM-DD hh:mm:ss. C’est un prérequis de MySQL.

Par contre, l’erreur affichée correspond à une insertion que tu essayes de faire au format DD-MM-YYYY, au lieu de respecter le format attendu par MySQL.

Explique nous ce que tu essayes de faire, si tu souhaites plus d’aide.

Bad

1 « J'aime »

Salut Bad,
Merci je préfère cette réponse qui est plus logique. Cela veux dire que tous les plugins doivent afficher les dates au format US pas au format FR. Justement en fouinant, je pense que c’est dans /var/www/html/core/class/history.class.php lignes 952 et 995, appel à MySQL.
Peut-on modifier cela facilement ?

Le format us c’est MM-DD-YY si je ne me trompe. Le format YYYY-MM-DD est une norme ISO et presque tout en informatique le respecte

Le format YYYY-MM-DD est connu sous le nom de format « ISO 8601 » pour la date. Il s’agit d’une norme internationale pour la représentation des dates et des heures, publiée par l’Organisation internationale de normalisation (ISO). Ce format est conçu pour éviter l’ambiguïté en étant clair et facile à comprendre dans un contexte international. Il commence par l’année, suivie du mois, puis du jour, ce qui permet un tri et une comparaison logiques des dates. Ce n’est donc pas spécifiquement un format américain, mais plutôt un standard international utilisé dans de nombreux pays et contextes différents pour faciliter l’échange d’informations de date de manière cohérente.

En sus, c’est le seul format de date qui permet aisément un tri chronologique. Heureux sont ceux qui n’ont pas connu l’utilisation d’un autre format de date.

1 « J'aime »

MM-DD-YY est la version courte du format US. MM-DD-YYYY est la version longue, à privilégier. C’est déjà un cauchemar à lire si on ne sait pas qu’on est dans un contexte US : 07-04-2005, est-ce le 7 avril 2005 ou le 4 juillet 2005 ? Alors un format MM-DD-YY où on se retrouve avec 07-04-05, bon courage pour connaitre la vraie date. Bref, avec le format ISO, au moins tout le monde sur Terre sait lire la date et est en mesure de la remettre à sa sauce si le format ISO n’est pas adapté à l’affichage.

C’est à toi de gérer du côté soit de ton affichage, soit du programme/script/scenario/cequetuveux qui veut écrire en base de données. En gros, il faut que tu formates les dates à ton usage.

La gestion des dates dans Jeedom est disponible dans cette partie de la documentation :
https://doc.jeedom.com/fr_FR/core/4.3/scenario#Les%20tags

Si tu as besoin de fonctions plus avancées, la documentation Jeedom renvoie vers la documentation de PHP sur l’utilisation des dates. Ça te permettra de faire absolument tout ce que tu peux envisager avec les dates.

Effectivement je suis d’accord avec la réponse de belgotux sur les formats US et ISO.
Sauf que les config systèmes, on ne paramètre pas ISO puis c’est lié à une localisation.
Pour la remarque de pommedapi, une jeedom est destinée pour le marché français, donc pour madames et messieurs tout le monde c’est plus conviviale de lire les infos au format français, pas ISO.
ISO c’est coté programmeur, mais pas utilisateur.

Salut,

Le titre de ton sujet parle de mySQL quand même c’est pas trop le truc que touche les utilisateurs il me semble… bref je ne comprend pas trop ce que tu fais pour avoir ce message que tu cite dans ton premier post en dehors de tout contexte bien entendu… je ne comprend pas non plus ce que tu reproche à la norme de format de date nécessaire en base? Si l’idée est d’enregistrer les dates au format fr c’est un non sens complet et l’explication est parfaitement détaillée quelques messages plus haut.

Merci Pommedapi pour toutes ces informations. Je vais regarder cela de prêt pour modifier surtout l’aspect affichage. Mais maintenant j’ai comprit la raison du problème de date.

Il n’y a pas de « problème de date », tu essayes de faire quelque chose de « déviant » que tu ne sembles pas vouloir nous expliquer.

Je réitère donc ma question

1 « J'aime »

Bad,
Je souhaiterais afficher les dates au format français sur les objets des plugins (LINKY, VEOLIA, autres). Du coup j’ai fait machine arrière pour remettre toutes les occurrences des dates au format ISO. Objectif modifier les dates qui concerne l’affichage seulement.
Merci pour ton aide, si tu as une idée ?

C’est donc ce genre de date que tu souhaites avoir en format JJ/MM/AAAA
image

Je pense donc que le mieux est de laisser la BDD comme elle est !
Sachant qu’en général, on ne modifie pas une valeur en base pour résoudre son affichage.

C’est plus le widget à modifier afin qu’il présente la donnée au format souhaité.

Cependant, je viens de regarder en v4.4.2b, toutes dates figurant dans un tooltip ou autres et au format YYYY/MM/DD

N’est-ce pas tout ce que je dis dans mes 2 réponses du début (plus vulgarisé)? :wink:

… oui je comprends l’idée mais seulement si on parle de sa représentation en chaîne de caractères.
Une date est un date et peut toujours être triée/comparée à une autre, le format utilisé pour l’afficher n’a pas d’importance.
En programmation c’est bien avec un objet date que l’on travaille.