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

时间:2016-09-07 08:54:11

标签: php date datetime time dateinterval

当我将DateTime值增加任何小时时,结果是OKAY,但是当我将它增加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



我做错了什么?

3 个答案:

答案 0 :(得分:4)

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小时;)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

日期格式是问题,

$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