2013-07-31 5 views
9

Mon formulaire a 2 champs - Time_from et Time_toDateTime ajouter 1 jour

Maintenant, je dois ajouter une entrée dans ma base de données pour chaque jour (s'il y a une différence entre les jours) ex. Time_from = 26/08/2013 08:00:00 et Time_to = 28/08/2013 16:00:00 Donc, dans ma base de données que je devrais obtenir 3 entrées

Time_from = 2013-08-26 08:00:00 and Time_to = 2013-08-26 16:00:00 
Time_from = 2013-08-27 08:00:00 and Time_to = 2013-08-27 16:00:00 
Time_from = 2013-08-28 08:00:00 and Time_to = 2013-08-28 16:00:00 

Donc, à cette fin, j'ai fait une méthode, où je trouve d'abord la différence entre ces 2 dates et puis j'utilise une boucle for qui fonctionnera autant de jours en différence ces 2 dates ont, et à la fin im juste en ajoutant 1 jour.

public function createOffer($offer) 
{ 
$time_from = new DateTime($offer->time_from); 
$time_to = new DateTime($offer->time_to); 
$interval = $time_from->diff($time_to); 

for ($counter = 0; $counter <= $interval->d; $counter++) { 
    $offer->time_from = $time_from->format('Y-m-d H:i:s'); 
    $offer_time_to = new DateTime($time_from->format('Y-m-d')); 
    $offer_time_to->setTime($time_to->format('H'), $time_to->format('i') 
     , $time_to->format('s')); 
    $offer->time_to = $offer_time_to->format('Y-m-d H:i:s'); 

    if ($offer->validate()) { 
    $offer->save(); 
    } 

    date_modify($time_from, '+1 day'); 
    } 
} 

Pour une raison quelconque, le code ne fonctionne pas.

Quand je supprimer le champ date_modify que le premier jour sera enregistré dans ma base de données (Devinez la boucle est seulement en cours d'exécution une fois alors)

Mais avec le date_modify dans mon code, seul le dernier jour est enregistré dans la base de données.

+0

$ Interval> il n'y a pas d « jours » différence, quelques heures seulement, dans les temps donné si la boucle ne fonctionnera une fois – Anigel

+0

Ainsi la différence entre les jours est seulement montré heures? – CreamYGEEK

+0

http://phpfiddle.org/main/code/3r1-6hc êtes-vous sûr de ne pas vouloir $ interval-> h plutôt que interval-> d – Anigel

Répondre

21

vous pouvez utiliser Ajouter fonction de DataTime objet

ici je vous donne un exemple d'ajouter un 1 à la date de votre poste comme

<?php 
$date = new DateTime('2000-01-01'); 
$date->add(new DateInterval('P1D')); 
echo $date->format('Y-m-d') . "\n"; 
?> 

SORTIE

2000-01-02 

Espoir Cela vous aidera à résoudre votre problème.

+0

Je reçois toujours le même résultat, seul le dernier jour est enregistré dans la base de données . – CreamYGEEK

+0

Veuillez tracer la date avant de transmettre le nouveau DateTime ('votre date'); et votre fonction devrait être de retour chaque fois qu'une nouvelle date signifie 3 fois que vous devez appeler ou retourner la valeur de la fonction. – liyakat

+0

Vous solution semble fonctionner .. Apparemment, il y a un problème Jquery, qui est responsable de l'insecte .. – CreamYGEEK

2
$date = new DateTime('2017-01-17'); 
$date->modify('+1 day'); 

echo $date->format('Y-m-d'); // 2017-01-18 

Vous pouvez le faire aussi:

$dateTo = new \DateTime('1980-12-07 +1 day'); 
echo $dateTo->format('Y-m-d'); // 1980-12-08 
Questions connexes