向DateTime(PHP)添加'x'小时,'x'分钟和'x'秒

Bor*_*rsn 0 php

我有一定的时间戳,想要添加一个'x' hours,'x' minutes'x' seconds为它.

我试过这样的:

date_default_timezone_set('UTC'); 
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
$now = $now->setTimezone(new DateTimeZone('Europe/London'))->format('Y-m-d H:i:s.u');

echo '<br> Localized: '.$now;

echo '<br> Time1: '.date("Y-m-d H:i:s", strtotime('+3 hours +5 minutes +4 seconds', $now));

echo '<br> Time2: '.date("Y-m-d H:i:s", strtotime('+0 hours +5 minutes +4 seconds', $now));
Run Code Online (Sandbox Code Playgroud)
Localized: 2018-06-12 10:51:32.166452

Time1: 1970-01-01 03:38:42
Time2: 1970-01-01 00:38:42
Run Code Online (Sandbox Code Playgroud)

但结果是不正确的......我在这里做错了什么?

Art*_*nko 5

您可以DateTime通过添加方法更改对象.它需要DateInterval对象.但是如果要创建新对象,则它会更改对象,您应该使用DateTimeImmutable

$now->add(new DateInterval('PT3H5M4S'));
Run Code Online (Sandbox Code Playgroud)

P - 必需前缀表示"期间"

T - 表示在时间段之前必须存在的"时间",因为日期和时间段等于char M

在这种情况下:

  • 3H - 3小时
  • 5M - 5分钟
  • 4S - 4秒

完整时期的例子可以是这样的new DateInterval('P1Y2M5DT3H5M4S'),将等于1年2个月5天3小时5分4秒.