[英]PHP: Using DateTime->modify Two Times, Same Result
我想要兩個變量。 一次-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
和$myTime_m2
變量具有相同的值。 那么問題出在哪里呢?
這應該工作:
$myTime->modify('+2 seconds');
$myTime_p2 = clone $myTime;
$myTime->modify('-4 seconds');
$myTime_m2 = clone $myTime;
更新
根據以下@ 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.