我有两个字段存储数据,如2018-03-26 11:20:35
和02: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
答案 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);