我想要两个变量。一次PUPPET_EXTRA_OPTS=--no-client
次,另一次-2 seconds
次。这是我的代码:
+2 seconds
结果与预期不符:
$myTime = '2015-08-17 08:19:26';
$myTime = DateTime::createFromFormat('Y-m-d H:i:s', $myTime);
echo '<pre>';
var_dump( $myTime );
$myTime->modify('+2 seconds');
$myTime_p2 = $myTime;
$myTime->modify('-4 seconds');
$myTime_m2 = $myTime;
var_dump( $myTime );
var_dump( $myTime_p2 );
var_dump( $myTime_m2 );
echo '</pre>';
如您所见,object(DateTime)#1 (3) {
["date"]=>
string(26) "2015-08-17 08:19:26.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2015-08-17 08:19:24.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2015-08-17 08:19:24.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2015-08-17 08:19:24.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
和$myTime_p2
变量具有相同的值。那么问题出在哪里?
答案 0 :(得分:1)
这应该有效:
$myTime->modify('+2 seconds');
$myTime_p2 = clone $myTime;
$myTime->modify('-4 seconds');
$myTime_m2 = clone $myTime;
答案 1 :(得分:1)
UPDATE
根据@ Im0rtality的评论使用DateTimeImmutable
:
$myTime = '2015-08-17 08:19:26';
$date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s',$myTime);
print $date->modify('+2 seconds')->format('Y-m-d H:i:s') . PHP_EOL;
print $date->modify('-2 seconds')->format('Y-m-d H:i:s') . PHP_EOL;
/*
2015-08-17 08:19:28
2015-08-17 08:19:24
*/
您需要克隆初始对象以获得两个变体
$myTime = '2015-08-17 08:19:26';
$myTime = DateTime::createFromFormat('Y-m-d H:i:s', $myTime);
echo '<pre>';
var_dump( $myTime );
$myTime_p2 = clone $myTime;
$myTime_p2->modify('+2 seconds');
$myTime_m2 = clone $myTime;
$myTime_m2->modify('-4 seconds');
var_dump( $myTime );
var_dump( $myTime_p2 );
var_dump( $myTime_m2 );
echo '</pre>';
<pre>object(DateTime)#1 (3) {
["date"]=>
string(26) "2015-08-17 08:19:26.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2015-08-17 08:19:26.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2015-08-17 08:19:28.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
object(DateTime)#3 (3) {
["date"]=>
string(26) "2015-08-17 08:19:22.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
</pre>