将 hours:min:sec 添加到 PHP 中的日期
add hours:min:sec to date in PHP
我正在尝试添加 hh:mm:ss 日期。我该怎么做?
我尝试了以下方法,但是当小时是字符串时它可以工作,但是当添加时间类似于 MySQL 日期时间时它不起作用。
$new_time = date("Y-m-d H:i:s", strtotime('+5 hours'));
我正在尝试为以下问题寻求解决方案:
$timeA= '2015-10-09 13:40:14';
$timeB = '03:05:01'; // '0000-00-00 03:05:01'
输出:
$timeA + $timeB = 2015-10-09 16:45:15 ?
如何添加这个?
$timeA = new DateTime('2015-10-09 13:40:14');
$timeB = new DateInterval('PT3H5M1S'); // '03:05:01';
$timeA->add($timeB);
echo $timeA->format('Y-m-d H:i:s');
您需要将时间分解为正确的 DateInterval 格式,但使用 explode()
;
即可轻松完成
这可能是这样的:
$parts = array_map(function($num) {
return (int) $num;
}, explode(':', '03:05:01'));
$timeA = new DateTime('2015-10-09 13:40:14');
$timeB = new DateInterval(sprintf('PT%uH%uM%uS', $parts[0], $parts[1], $parts[2]));
$timeA->add($timeB);
echo $timeA->format('Y-m-d H:i:s');
print date('Y-m-d H:i:s',strtotime($timeA." +03 hour +05 minutes +01 seconds"));
应该也可以。
所以:
$timeA= '2015-10-09 13:40:14';
$timeB = vsprintf(" +%d hours +%d minutes +%d seconds", explode(':', '03:05:01'));
print date('Y-m-d H:i:s',strtotime($timeA.$timeB));
可以解决。
您也可以使用以下方法将时间转换为秒:Convert time in HH:MM:SS format to seconds only?
$time = '03:05:01';
$seconds = strtotime("1970-01-01 $time UTC");
然后你可以把秒数加到
$currentTime = '2015-10-10 13:40:14';
$newTime = date("Y-m-d H:i:s", strtotime( $currentTime.'+'.$seconds.' seconds'));
如果您更喜欢使用@John Conde 提供的 DateTime 对象,可以通过以下两种方法将时间字符串转换为以下格式:
$formattedTime = preg_replace("/(\d{2}):(\d{2}):(\d{2})/","PTHMS","03:05:11");
或者,当您从数据库中读取它时:
select concat(hour(last_modified),'H',minute(last_modified),'M',second(last_modified),'H') from people;
所以更通用的代码方法是:
$initial = 'some time';
$interval = 'the interval value';
$initialTime = new DateTime($initial);
$intervalTime = new DateInterval($interval);
$initialTime->add($intervalTime);
echo $initialTime->format('Y-m-d H:i:s');
我正在尝试添加 hh:mm:ss 日期。我该怎么做?
我尝试了以下方法,但是当小时是字符串时它可以工作,但是当添加时间类似于 MySQL 日期时间时它不起作用。
$new_time = date("Y-m-d H:i:s", strtotime('+5 hours'));
我正在尝试为以下问题寻求解决方案:
$timeA= '2015-10-09 13:40:14';
$timeB = '03:05:01'; // '0000-00-00 03:05:01'
输出:
$timeA + $timeB = 2015-10-09 16:45:15 ?
如何添加这个?
$timeA = new DateTime('2015-10-09 13:40:14');
$timeB = new DateInterval('PT3H5M1S'); // '03:05:01';
$timeA->add($timeB);
echo $timeA->format('Y-m-d H:i:s');
您需要将时间分解为正确的 DateInterval 格式,但使用 explode()
;
这可能是这样的:
$parts = array_map(function($num) {
return (int) $num;
}, explode(':', '03:05:01'));
$timeA = new DateTime('2015-10-09 13:40:14');
$timeB = new DateInterval(sprintf('PT%uH%uM%uS', $parts[0], $parts[1], $parts[2]));
$timeA->add($timeB);
echo $timeA->format('Y-m-d H:i:s');
print date('Y-m-d H:i:s',strtotime($timeA." +03 hour +05 minutes +01 seconds"));
应该也可以。
所以:
$timeA= '2015-10-09 13:40:14';
$timeB = vsprintf(" +%d hours +%d minutes +%d seconds", explode(':', '03:05:01'));
print date('Y-m-d H:i:s',strtotime($timeA.$timeB));
可以解决。
您也可以使用以下方法将时间转换为秒:Convert time in HH:MM:SS format to seconds only?
$time = '03:05:01';
$seconds = strtotime("1970-01-01 $time UTC");
然后你可以把秒数加到
$currentTime = '2015-10-10 13:40:14';
$newTime = date("Y-m-d H:i:s", strtotime( $currentTime.'+'.$seconds.' seconds'));
如果您更喜欢使用@John Conde 提供的 DateTime 对象,可以通过以下两种方法将时间字符串转换为以下格式:
$formattedTime = preg_replace("/(\d{2}):(\d{2}):(\d{2})/","PTHMS","03:05:11");
或者,当您从数据库中读取它时:
select concat(hour(last_modified),'H',minute(last_modified),'M',second(last_modified),'H') from people;
所以更通用的代码方法是:
$initial = 'some time';
$interval = 'the interval value';
$initialTime = new DateTime($initial);
$intervalTime = new DateInterval($interval);
$initialTime->add($intervalTime);
echo $initialTime->format('Y-m-d H:i:s');