8768 sujets

Développement web côté serveur, CMS

bonjour,

dans un appli je veux travailler avec des dates, par exemple la date du jour et la date une semaine avant.

dans le code ci-joint, j'ai beau créer une deuxième variable pour faire varier ma date, ma variable initiale est elle aussi modifiée sans que je comprenne pourquoi...
La seule option que j'ai trouvée est de remettre un petit coup de $date->modify('+1 week'); à ma variable $date, mais je trouve que ce n'est optimum..
existe il une autre solution?


<?php 

$date = new DateTime();  // nous sommes le 28 fev 2017

// affiche Tuesday:28-02-2017
echo $date->format('l:d-m-Y').'<br>';

$date2 = $date;
$date2->modify('-1 week');

// affiche Tuesday:21-02-2017
echo $date2->format('l:d-m-Y').'<br>';

// affiche Tuesday:21-02-2017
// $date a été modifié comme $date2 !!
echo $date->format('l:d-m-Y').'<br>';

 ?>


Modifié par lionel_css3 (28 Feb 2017 - 15:41)
Salut lionel...

un peu d'objet Smiley cligne

$date2 = $date; don ctu assigne l'objet a une autre variable, un alias donc.

pour avoir une deuxième date il faut créer un deuxième objet

$date = new DateTime();
$date2 = new DateTime();

là tu aura bien 2 objets et tu pourra faire tes assignations Smiley cligne
Meilleure solution
ah bien oui, merci pchlj, je me doutais bien que j'oubliais une étape.

en fait mon code doit plutôt alors ressembler à ça?
(je me paie même le luxe de chainer les deux méthodes lol)


<?php 
$date = new DateTime();  // nous somme le 28 fev 2017
$date2 = new DateTime();  // nous somme le 28 fev 2017

// affiche Tuesday:28-02-2017
echo $date->format('l:d-m-Y').'<br>';

// affiche Tuesday:21-02-2017
echo $date2->modify('-1 week')->format('l:d-m-Y').'<br>';


// affiche Tuesday:28-02-2017
echo $date->format('l:d-m-Y').'<br>';

?>
Salut,
Pour faire une vraie copie, mieux vaut utiliser clone.
$date = new DateTime();
$other = clone $date;