如何用PHP中的现有日期时间来计算小时数?

时间:2018-03-26 10:16:24

标签: php datetime time

我有两个字段存储数据,如2018-03-26 11:20:3502:25:10(2小时25分10秒),第一个数据是日期和时间。第二个是时间。我想总结一下,最后我的结果应该2018-03-26 13:45:45

如何在PHP代码中执行此操作?

我试过这种方式:

<?php
$date = '2018-03-26 11:20:35';
//echo $date;
//echo "<br>";
$hours = '02:25:10'; /* this data dynamic */
$sumTime = strtotime($date) + strtotime($hours);
$new_time = date("Y-m-d H:i:s", $sumTime);
echo $new_time;

输出:

Warning: date() expects parameter 2 to be integer, float given in C:\my-project-path\test.php on line 7

5 个答案:

答案 0 :(得分:4)

这是一个简单的解决方案,会跳过一些检查:

// convert your date to DateTime object
$date = '2018-03-26 11:20:35';
$dt = new DateTime($date);

// convert your period to DateInterval
$hours = '02:25:10'; /* this data dynamic */
$parts = explode(':', $hours);
$interval = new DateInterval('PT' . (int)$parts[0] . 'H' . $parts[1] . 'M' . $parts[2] . 'S');

// Add interval to date
$dt->add($interval);
// Format date as you need
echo $dt->format('Y-m-d H:i:s');

答案 1 :(得分:3)

您可以通过今天"00:00:00"和今天$hours的比较来创建持续时间(以秒为单位)。实际上,strtotime($hours)会在$hours返回今天的时间戳,因此,添加两个时间戳不会给出预期的结果。

如果$hours小于24小时,您可以使用:

$date = '2018-03-26 11:20:35';
$hours = '02:25:10';

$d0 = strtotime(date('Y-m-d 00:00:00'));
$d1 = strtotime(date('Y-m-d ').$hours);

$sumTime = strtotime($date) + ($d1 - $d0);
$new_time = date("Y-m-d H:i:s", $sumTime);
echo $new_time; 

输出:

2018-03-26 13:45:45

答案 2 :(得分:2)

可以通过一些简单的字符串操作来完成:

$dt = new DateTime("$date UTC");
$modify = preg_replace('/:/', ' hours ', $hours, 1);
$modify = preg_replace('/:/', ' minutes ', $modify, 1);
$modify .= ' seconds';
$dt->modify($modify);

demo

如果你有MySQL作为你的数据存储,你可以这样做:

DATE_ADD(field1, INTERVAL field2 HOUR_SECOND)

demo

答案 3 :(得分:1)

你可以这样做:

ctrl + y

我假设你只需要时间,而不是分钟和秒钟

编辑:

你可以使用regexp

这样做
$hour = $hours->format('H'); //This way you get a string which contains the hours
$date->modify('+'.$hour.' hour'); //you modify your date adding the hours

答案 4 :(得分:1)

您应该检查DateTime::add

示例:

<?php

// Convert h:m:s format to PThHmMsS format
sscanf('02:25:10', '%d:%d:%d', $hour, $minute, $second);
$intervalSpec = sprintf('PT%dH%dM%dS', $hour, $minute, $second);

$datetime = new DateTimeImmutable('2018-03-26 11:20:35');
$newDatetime = $datetime->add (new DateInterval($intervalSpec));
echo $newDatetime->format(DateTime::W3C);