PHP为时间值增加15分钟

PHP为时间值增加15分钟,php,datetime,Php,Datetime,我有一个接收时间值的表单: $selectedTime = $_REQUEST['time']; 时间的格式是9:15:00,也就是上午9:15。然后我需要给这个加上15分钟,并将其存储在一个单独的变量中,但我被难住了 我试图使用strotime但没有成功,例如: $endTime = strtotime("+15 minutes",strtotime($selectedTime))); 但那是不可能的 尽管您可以通过PHP的时间函数来实现这一点,但让我向您介绍一下PHP的DateTime类

我有一个接收时间值的表单:

$selectedTime = $_REQUEST['time'];
时间的格式是9:15:00,也就是上午9:15。然后我需要给这个加上15分钟,并将其存储在一个单独的变量中,但我被难住了

我试图使用strotime但没有成功,例如:

$endTime = strtotime("+15 minutes",strtotime($selectedTime)));

但那是不可能的

尽管您可以通过PHP的时间函数来实现这一点,但让我向您介绍一下PHP的
DateTime
类,该类及其相关类确实应该存在于任何PHP开发人员的工具包中

// note this will set to today's current date since you are not specifying it in your passed parameter. This probably doesn't matter if you are just going to add time to it.
$datetime = DateTime::createFromFormat('g:i:s', $selectedTime);
$datetime->modify('+15 minutes');
echo $datetime->format('g:i:s');
请注意,如果您想做的基本上是提供12或24小时时钟功能,您可以添加/减去时间,而实际上不关心日期,因此您希望消除日光节约时间更改可能带来的问题,我建议使用以下格式之一:

!g:i:s
12小时格式,小时不带前导零

!G:i:s
12小时格式,带前导零

注意
格式中的项目。这将把date组件设置为LinuxEpoch中的第一天(1970年1月1日)

您的代码不工作(解析),因为您在最后有一个额外的
导致解析错误。计数,您有2个
和3个
。如果您解决了这个问题,它可以正常工作,但是
strotime()
返回一个时间戳,因此要获得一个人类可读的时间,请使用
date()

获取一个编辑器,该编辑器将语法高亮显示并显示不匹配的括号、大括号等

在没有任何TZ或DST的情况下直接计时,并增加15分钟(阅读zerkms评论):


尽管如此,
仍然是这里的主要问题。

要扩展以前的答案,一个这样做的函数可以这样工作(根据、和以您喜欢的方式更改时间和间隔格式):

(我还写了一篇文章。)

//返回调整后的时间。
函数addMinutesToTime($time,$plusMinutes){
$time=DateTime::createFromFormat('g:i:s',$time);
$time->add(新的日期间隔('PT')((整数)$plusMinutes.'M');
$newTime=$time->format('g:i:s');
返回$newTime;
}
$adjustedTime=AddMinutesTime('9:15:00',15);
回显“调整时间:”$调整时间。PHP_EOL。PHP_EOL;

您也可以使用下面的代码。它非常简单

$selectedTime = "9:15:00";
echo date('h:i:s',strtotime($selectedTime . ' +15 minutes'));

当前日期和时间

$current_date_time = date('Y-m-d H:i:s');
15分钟前的日期和时间

$newTime = date("Y-m-d H:i:s",strtotime("+15 minutes", strtotime($current_date)));
strotime返回当前时间戳,date将格式化时间戳

  $date=strtotime(date("h:i:sa"))+900;//15*60=900 seconds
  $date=date("h:i:sa",$date);
这将使当前时间增加15分钟

相当容易

$timestring = '09:15:00';
echo date('h:i:s', strtotime($timestring) + (15 * 60));

strotime
将日期转换为时间戳<代码>9:15:00
不是日期。只需手动拆分并添加15分钟即可。@Charlie74:实际上不是。这是一个有效的日期,只有时间在这里“如果你只是想增加时间,这可能并不重要”——那么夏季时间呢?@zerkms我猜这是如何处理的,这实际上取决于OP的需要。如果您只是在严格地寻找一个12小时的时间添加功能(即,您不想考虑夏令时的更改),您可以使用格式
!g:i:s
始终将日期设置为大纪元时间(1970年1月1日),这样您就不会有这样的顾虑。“如果您只是严格地看一下”——不是我,但OP正在寻找可以正确地为特定时间字符串添加15分钟的内容。您当前提供的解决方案可能会失败(请参阅ideone链接)@zerkms我想说的是,OP可能不会将其视为失败。它确实没有得到解决。我将更新答案以反映
!g:i:s
在注释中给出的解决方案。与另一个答案中的问题相同-如果某个时间接近班次,则在夏季时钟班次时,该解决方案将失败passed@zerkms:这就是使用strotime()的原因,因为与加法不同,它考虑了DST。大多数情况下,您需要考虑DST。取决于要求。您不能仅考虑时间。时间字符串不是日期,因此您无法判断在这种情况下是否需要应用DST。
$newTime = date("Y-m-d H:i:s",strtotime("+15 minutes", strtotime($current_date)));
  $date=strtotime(date("h:i:sa"))+900;//15*60=900 seconds
  $date=date("h:i:sa",$date);
$timestring = '09:15:00';
echo date('h:i:s', strtotime($timestring) + (15 * 60));