I’ve been trying to set start times for different flights of competitors. The addMinutes function seems to update every variable associated with the “ONE” I’m trying to alter. Is this the expected result, or am I missing something really simple?
Thanks for your assistance,
public function test_i18_addminutes( $a_time = null ) { $b_time = $a_time ?: Time::now(); for ( $i = 1; $i < 5; $i++ ) { $use_time = $b_time; debug( "BTIME: $b_time USETIME: $use_time" ); for ( $j = 1; $j < 7; $j++ ) { $mytime = $use_time->addMinutes( 15.0 ); debug( " MYTIME: $mytime BTIME: $b_time USETIME: $use_time" ); } } $this->redirect( '/' ); }
srcControllerTestsController.php (line 89)
‘BTIME: 9/14/21, 6:09 PM USETIME: 9/14/21, 6:09 PM’
‘ MYTIME: 9/14/21, 6:24 PM BTIME: 9/14/21, 6:24 PM USETIME: 9/14/21, 6:24 PM’
‘ MYTIME: 9/14/21, 6:39 PM BTIME: 9/14/21, 6:39 PM USETIME: 9/14/21, 6:39 PM’
‘ MYTIME: 9/14/21, 6:54 PM BTIME: 9/14/21, 6:54 PM USETIME: 9/14/21, 6:54 PM’
‘ MYTIME: 9/14/21, 7:09 PM BTIME: 9/14/21, 7:09 PM USETIME: 9/14/21, 7:09 PM’
‘ MYTIME: 9/14/21, 7:24 PM BTIME: 9/14/21, 7:24 PM USETIME: 9/14/21, 7:24 PM’
‘ MYTIME: 9/14/21, 7:39 PM BTIME: 9/14/21, 7:39 PM USETIME: 9/14/21, 7:39 PM’
‘BTIME: 9/14/21, 7:39 PM USETIME: 9/14/21, 7:39 PM’
‘ MYTIME: 9/14/21, 7:54 PM BTIME: 9/14/21, 7:54 PM USETIME: 9/14/21, 7:54 PM’
‘ MYTIME: 9/14/21, 8:09 PM BTIME: 9/14/21, 8:09 PM USETIME: 9/14/21, 8:09 PM’
Advertisement
Answer
All your variables, a_time
, b_time
, and use_time
, point to the same object. Furthermore CakeI18nTime
is mutable, so $mytime
will also be the very same object.
If you want immutable time objects, use CakeI18nFrozenTime
instead. The time manipulation methods of those objects will return new instances.
See also