8722 sujets

Développement web côté serveur, CMS

Salut à tous

Pour la précision je suis sur Symfony 2

ma variable datetime contient ceci :

object(DateTime)#380 (3) { ["date"]=> string(26) "2016-04-16 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }


J'aimerais changer la date 2016-04-16 00:00:00.000000
en ceci 2016-16-04 00:00:00.000000.

Ok pour afficher (avec echo ou var_dump) la date sous le format que je veux avec ->format('Y-m-d')
mais mon objectif est de changer l'objet lui même, car c'est lui que j'utilise pour mon ORM.

Donc j'ai essayer quelque chose comme ça :

date('Y-d-m', strtotime($monOBJETDate->format('Y-m-d')));

mais non, ça ne marche pas. il faut bien sur garder les heures.

Merci à ceux qui m'aideront.
Modérateur
Bonjour,

Changer l'objet Date n'a pas beaucoup de sens, et ce n'est sûrement pas la bonne manière de procéder.

Quel ORM utilises-tu ? Doctrine?
Quel type d'objet Doctrine/ou autre ORM?
Pourquoi utilises-tu ce format étrange, pour le stockage dans la DB ou l'utilisation en front?
Comment est stockée ta data dans ta base de donnée.
Oui doctrine,

Je récupère mon champs datetime qui vient de ma BDD (SQL SERVER) via mon repository.

Du coup il est, en sortie, au format Y-m-d. Mais quand je l'insère j'ai une erreur de convertion "probleme de type varchar" etc.. Si je mets manuellement sous format Y-d-m (dans la requête INSERT INTO) cela fonctionne. Sauf que Doctrine lui, l'envoi sous format Y-m-d. C'est ce que je trouve chiant avec SQL SERVER, c'est que la datetime de sortie ou d'entrée ne sont pas au même format... je ne sais pas pourquoi, c'est déjà comme ça avant que j'arrive sur le projet.

Du coup j'ai besoin de changer le format de la date de mon objet. J'utilise ce format car c'est pour du back office, et moi j'utilise le code déjà présent.
Modifié par JENCAL (13 Dec 2017 - 14:58)
Et par exemple
$date = DateTime::createFromFormat("Y-d-m", $packageDates->getDtDeb()->format('Y-d-m'));

si je fais un echo $date, le format n'est plus Y-d-m mais Y-m-d... je comprend pas pourquoi...
Modifié par JENCAL (13 Dec 2017 - 15:29)
Administrateur
Les dattes, c'est pourtant très bon pour la santé Smiley langue
Meilleure solution
Modérateur
a écrit :
si je fais un echo $date, le format n'est plus Y-d-m mais Y-m-d... je comprend pas pourquoi...

Ce qui me semble mal compris c'est qu'un objet DateTime en php ne contient pas de formatage par défaut. L'affichage dans print_r ou var_dump utilise juste un format standard pour la conversion en string. Toute conversion en string doit donc être faite avec un format explicite.

Par contre si tu tentes d'utiliser doctrine avec une base de donnée déjà existante attention avec les dates et SQL SERVER:
a écrit :
Doctrine assumes that you use DateTime2 data-types. If your legacy database contains DateTime datatypes then you have to add your own data-type (see Basic Mapping for an example)


Autrement dit si tu utilises les formats de stockage fantasques de dates de SQL SERVER, débrouille-toi tout seul Smiley smile

Il faut donc créer un custom type doctrine pour gérer ton champ
Exactement kustolovic

"Ce qui me semble mal compris c'est qu'un objet DateTime en php ne contient pas de formatage par défaut. "

C'est exactement ce que j'avais mal compris. D'où l'impossibilité de faire ce que je voulais. Enfin bref j'ai trouver une autre solution Smiley smile

Merci à vous tous!
Modifié par JENCAL (15 Dec 2017 - 15:06)