web-dev-qa-db-fra.com

Symfony 4 - Définir la date et l'heure

j'ai donc suivi cette base de données et le tutoriel Doctrine: https://symfony.com/doc/current/doctrine.html

la seule différence est que j'ai ajouté un created_ts champ à celui-ci (parmi d'autres champs, mais ils fonctionnent très bien, donc pas besoin d'y entrer).

J'ai utilisé le make:entity commande pour générer ma classe et la méthode pour définir mon created_ts a été généré comme ceci:

public function setCreatedTs(\DateTimeInterface $created_ts): self
{
    $this->created_ts = $created_ts;

    return $this;
}

Donc dans mon /index page Je suis allé enregistrer une nouvelle entité en utilisant:

$category->setCreatedTs(\DateTimeInterface::class, $date);

J'avais une drôle de sensation que cela ferait une erreur et j'avais raison:

Type error: Argument 1 passed to App\Entity\Category::setCreatedTs() must implement interface DateTimeInterface, string given

mais je ne sais pas comment implémenter le DateTimeInterface à l'intérieur de la fonction .. J'ai essayé de googler mais cela montre beaucoup de Symfony2 posts, quelques-uns que j'ai essayé en vain.

Comment définir une valeur datetime dans mon entité à partir de ->set méthode?

(s'il y a déjà une réponse, veuillez lier. #symfonyScrub)

mise à jour

# tried doing this:
$dateImmutable = \DateTime::createFromFormat('Y-m-d H:i:s', strtotime('now')); # also tried using \DateTimeImmutable

$category->setCategoryName('PHP');
$category->setCategoryBio('This is a category for PHP');
$category->setApproved(1);
$category->setGuruId(1);
$category->setCreatedTs($dateImmutable); # changes error from about a string to bool
7
treyBake

Si votre date est la date actuelle, vous pouvez simplement faire ceci:

$category->setCreatedTs(new \DateTime())

Votre première erreur a été provoquée par la fonction strtotime qui retourne un horodatage mais le constructeur\DateTime s'attendait à un Y-m-d H:i:s format.

C'est pourquoi au lieu de créer un\DateTime valide, il a renvoyé false.

Même si ce n'est pas nécessaire dans ce cas, vous auriez dû faire quelque chose comme ça pour créer un \DateTime basé sur un horodatage:

$date = new \DateTime('@'.strtotime('now'));
16
fxbt