DateTime + 12 小时显示相同的 DateTime。为什么?

DateTime + 12 hours showing same DateTime. Why?

当我将 DateTime 值增加任何小时时,结果是好的,但是当我将它增加 12 小时时,它并没有增加。


详情请看以下代码:



$creation_date = new DateTime('2016-09-07 06:00:00', new DateTimeZone('Asia/Kolkata'));
$expiration_date = new DateTime('2016-09-07 06:00:00', new DateTimeZone('Asia/Kolkata'));

当我将 $expiration_date 变量增加 1 小时、3 小时、8 小时、24 小时等时,结果是完美的。例如,

案例 1:

$expiration_date->add(new DateInterval('PT1H'));
echo "Creation Date: ".$creation_date->format('Asia/Kolkata')."<br/>Expiration Date: ".$expiration_date->format('Asia/Kolkata');

结果 1:

创建日期:2016-09-07 06:00:00
到期日期:2016-09-07 07:00:00

案例 2:

$expiration_date->add(new DateInterval('PT3H'));
echo "Creation Date: ".$creation_date->format('Asia/Kolkata')."<br/>Expiration Date: ".$expiration_date->format('Asia/Kolkata');

结果 2:
创建日期:2016-09-07 06:00:00
到期日期:2016-09-07 09:00:00

案例 3:

$expiration_date->add(new DateInterval('PT8H'));
echo "Creation Date: ".$creation_date->format('Asia/Kolkata')."<br/>Expiration Date: ".$expiration_date->format('Asia/Kolkata');

结果 3:
创建日期:2016-09-07 06:00:00
到期日期:2016-09-07 02:00:00

案例 4:

$expiration_date->add(new DateInterval('PT24H'));
echo "Creation Date: ".$creation_date->format('Asia/Kolkata')."<br/>Expiration Date: ".$expiration_date->format('Asia/Kolkata');

结果 4:
创建日期:2016-09-07 06:00:00
到期日期:2016-09-08 06:00:00

但是当我将 $expiration_date 变量增加 12 小时 时,日期并没有增加!

它们显示相同的日期时间!

案例 5:

$expiration_date->add(new DateInterval('PT12H'));
echo "Creation Date: ".$creation_date->format('Asia/Kolkata')."<br/>Expiration Date: ".$expiration_date->format('Asia/Kolkata');

结果 5:
创建日期:2016-09-07 06:00:00
到期日期:2016-09-07 06:00:00



我做错了什么?

8 小时给你

Creation Date: 2016-09-07 06:00:00
Expiration Date: 2016-09-07 02:00:00

你真的认为 6 + 8 是 2 吗?不,现在是 14 点,也就是下午 2 点 与 6 + 12 相同的是 18,即下午 6 点。将显示数据的格式更改为 24 小时 ;)

我猜它正在正确填充,但是您的时间格式需要设置为 24 小时制,请检查一下好吗?

日期格式有问题,

$expiration_date= new DateTime('2016-09-07 06:00:00', new DateTimeZone('Asia/Kolkata'));
$expiration_date->add(new DateInterval('PT8H'));
echo date_format($expiration_date, 'Y-m-d H:i:s'); //2016-09-07 14:00:00