我有一定的时间戳,想要添加一个'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)
但结果是不正确的......我在这里做错了什么?
您可以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秒.