Hello :)
Alors pour avoir la durée tu peux utiliser la fonction diff:
Et pour récupérer la durée tu fais:
Bonjour,
J'ai un objet Horaire défini par les champs suivants :
un nom ;
un commentaire (optionnel) ;
une date et heure de début ;
une date et heure de fin ;
un type d'horaire ;
un niveau de priorité (exemple : 0, 1, ou 2) ;
une date de création (définition automatique) ;
une date de dernière modification (définition automatique)
Ce que je veux
Je cherche comment calculer la durée de mon horraire, mais je sais pas comment je dois m'y prendre
voici mon controller :
Merci aux personne qui pourront m'aider.
Hello :)
Alors pour avoir la durée tu peux utiliser la fonction diff:
Et pour récupérer la durée tu fais:
Je te remercie pour ton aide, je vais essayer =)
Avec plaisir ^^
j'ai un joli message d'erreur ^^
Call to undefined method App\Entity\Horaire::diff()
alors je cherche à trouver la solution lol
Mmmmh tu as essayé de faire $horaire->diff($horaire) au lieux de $horaire->date_de_debut->diff($horaire->date_de_fin) ?
Ou alors des dates de debut et de fin ne sont pas des DateTime? Fais un dump de ça: get_class($horaire->date_de_debut)
j' ai fais ça , mais peut-être que je me suis complétement tromper, j'avoue que je suis un peut perdu la lol
'''
$interval = $horaire->setStartDate(new \DateTime())->diff($horaire->setEndDate(new \DateTime()));
'''
Ah oui x) ta function setStartDate ne retourne pas un DateTime mais le modèle lui même pour faire de la chain je pense x)
Fais voir ton modèle Horaire
<?php
namespace App\Entity;
use App\Repository\HoraireRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
class Horaire
{
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
#[ORM\Column(length: 999, nullable: true)]
private ?string $comment = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $startDate = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $endDate = null;
#[ORM\Column(length: 255)]
private ?string $priority = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $createdDate = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $modifiedDate = null;
#[ORM\ManyToOne(inversedBy: 'horaire')]
#[ORM\JoinColumn(nullable: false)]
private ?TypeHoraire $typeHoraire = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?\DateTimeInterface $totalDate = null;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getComment(): ?string
{
return $this->comment;
}
public function setComment(?string $comment): self
{
$this->comment = $comment;
return $this;
}
public function getStartDate(): ?\DateTimeInterface
{
return $this->startDate;
}
public function setStartDate(\DateTimeInterface $startDate): self
{
$this->startDate = $startDate;
return $this;
}
public function getEndDate(): ?\DateTimeInterface
{
return $this->endDate;
}
public function setEndDate(\DateTimeInterface $endDate): self
{
$this->endDate = $endDate;
return $this;
}
public function getPriority(): ?string
{
return $this->priority;
}
public function setPriority(string $priority): self
{
$this->priority = $priority;
return $this;
}
public function getCreatedDate(): ?\DateTimeInterface
{
return $this->createdDate;
}
public function setCreatedDate(\DateTimeInterface $createdDate): self
{
$this->createdDate = $createdDate;
return $this;
}
public function getModifiedDate(): ?\DateTimeInterface
{
return $this->modifiedDate;
}
public function setModifiedDate(\DateTimeInterface $modifiedDate): self
{
$this->modifiedDate = $modifiedDate;
return $this;
}
public function getTypeHoraire(): ?TypeHoraire
{
return $this->typeHoraire;
}
public function setTypeHoraire(?TypeHoraire $typeHoraire): self
{
$this->typeHoraire = $typeHoraire;
return $this;
}
public function getTotalDate(): ?\DateTimeInterface
{
return $this->totalDate;
}
public function setTotalDate(\DateTimeInterface $totalDate): self
{
$this->totalDate = $totalDate;
return $this;
}
}
Okay super alors il faut utiliser tes getter au lieux des setter
Esayes ça: $interval = $horaire->getStartDate()->diff($horaire->getEndDate());
Et ça devrait être bon
En gros ce que tu as fais: $interval = $horaire->setStartDate(new \DateTime())->diff($horaire->setEndDate(new \DateTime())); c'est de créer une nouvelle instance de DateTime, donc les deux instances seraient identiques, et en plus les setters retournent bien une instancce Horaire:
on est bien d'accord que tu le met dans le if?
'''
public function index(Request $request, EntityManagerInterface $entityManager, HoraireRepository $horaireRepository): Response
{
// formulaire pour ajouter un nouvel horaire
$horaire = new Horaire();
$form = $this->createForm(HoraireType::class, $horaire);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
date_default_timezone_set('Europe/Paris');
// je récupère la date et l'heure de début et de fin
$horaire->setCreatedDate(new \DateTime());
$horaire->setModifiedDate(new \DateTime());
$horaire->setTotalDate(new \DateTime());
$interval = $horaire->getStartDate()->diff($horaire->getEndDate());
$interval->format('m/Y');
$entityManager->persist($horaire);
$entityManager->flush();
// ... effectuer une action, telle que l'enregistrement de la tâche dans la base de données.
$this->addFlash('success', 'L\'ajout a bien été pris en compte');
return $this->redirectToRoute('app_horaire');
}
return $this->render('horaire/index.html.twig', [
'form_add_horraire' => $form->createView(),
'horaire' => $horaireRepository->findBy([], ['name' => 'asc']),
]);
}
'''
Alors oui ça a l'air d'être ça, ensuite ton $interval->format faut l'enregistrer dans une variable pour récupérer le format:
d'accord merci beaucoup