簡體   English   中英

PHP:使用DateTime-> modify兩次,結果相同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM