在PHP中添加分钟到日期时间


95

在进行了大量的google'ing和PHP手动阅读之后,我真的很想在日期时间增加X分钟,我似乎一无所获。

我的日期时间格式是:

2011-11-17 05:05year-month-day hour:minute

要添加的分钟数只是0到59之间的数字

我希望输出与添加分钟的输入格式相同。

有人可以给我一个有效的代码示例,因为我的尝试似乎并没有带我去任何地方?

Answers:


176
$minutes_to_add = 5;

$time = new DateTime('2011-11-17 05:05');
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));

$stamp = $time->format('Y-m-d H:i');

ISO 8601标准的持续时间是在形式的串P{y}Y{m1}M{d}DT{h}H{m2}M{s}S,其中所述{*}部件用指示的持续时间有多长一个数字值代替。

例如,P1Y2DT5S表示1年,2天和5秒。

在上面的示例中,我们向构造函数提供PT5M(或5分钟)DateInterval


日期:2011-11-18 00:00如果我加上5分钟,结果是2012-04-18 00:00。`$ time =新的DateTime($ _ REQUEST ['start']); $ time-> add(new DateInterval('P'。$ duration。'M')); $ endTime = $ time-> format('Ymd H:i'); echo $ endTime; `格式化的申请,看来我今天也无法解决^ _ ^
Luke B

2
DateTime比strtotime更好吗?
bozdoz 2011年

11
“ PT”代表什么?
NicholasJohn16

1
@bozdoz这不是“更好”的方法的问题。strtotime生成一个Unix时间戳作为时间戳,integer如果您要在php中对日期进行排序等,这将很有帮助。的DateTime类提供对象和程序样式的操作选项。它更具可读性,并且还更好地支持处理不同时区之间的差异;例如,如果您有一个项目,该项目输出来自同一数据实例的多个不同时区的日期。
DrewT '16

1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >>格式以字母P开头,表示“句号”。每个持续时间段由一个整数值表示,后跟一个周期指示符。如果持续时间包含时间元素,本说明书的该部分是由字母T之前
V形

110

PHP的DateTime类具有有用的修改方法,该方法采用易于理解的文本。

$dateTime = new DateTime('2011-11-17 05:05');
$dateTime->modify('+5 minutes');

您还可以使用字符串插值或串联来对其进行参数化:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");

10
最短最美!

1
头两个答案都很棒,而且效果很好,但我更喜欢这个答案。似乎更简单,更直观。
哈特利圣

38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

结果是

2011-11-17 05:21:00

现场演示是 here

如果您还不熟悉strtotime,那么最好php.net去发现它的强大功能:-)


1
最了解的人之一
NaveenDA '17年

19

您可以使用本机函数轻松地做到这一点:

strtotime('+59 minutes', strtotime('2011-11-17 05:05'));

我还是建议使用TimTime刚刚发布的DateTime类方法。


7

我认为这在处理时区时也会有所帮助。我修改后的解决方案基于@Tim Cooper的解决方案,即上面的正确答案。

$minutes_to_add = 10;
$time = new DateTime();
**$time->setTimezone(new DateTimeZone('America/Toronto'));**
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
$timestamp = $time->format("Y/m/d G:i:s");

粗线(第3行)是添加的。我希望这对某些人也有帮助。


4

答案有点晚,但是我将使用的方法是:

// Create a new \DateTime instance
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00');

// Modify the date
$date->modify('+5 minutes');

// Output
echo $date->format('Y-m-d H:i:s');

或在PHP> = 5.4中

echo (DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00'))->modify('+5 minutes')->format('Y-m-d H:i:s')

3

如果要提供包含分钟数的变量。

然后我认为这是实现此目标的好方法。

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");

2

strtotime("+5 minute", $date);


例:

$date = "2017-06-16 08:40:00";
$date = strtotime($date);
$date = strtotime("+5 minute", $date);
echo date('Y-m-d H:i:s', $date);

2

我不知道为什么设置为解决方案的方法对我不起作用。所以我在这里发布对我有用的东西,希望它可以对任何人有帮助:

$startTime = date("Y-m-d H:i:s");

//display the starting time
echo '> '.$startTime . "<br>";

//adding 2 minutes
$convertedTime = date('Y-m-d H:i:s', strtotime('+2 minutes', strtotime($startTime)));

//display the converted time
echo '> '.$convertedTime;

1

正如Brad和Nemoden在上面的回答中所指出的那样,strtotime()是一个很棒的函数。我个人认为,对于许多用例,标准的DateTime对象过于复杂。例如,我只想将当前时间增加5分钟。

我编写了一个函数,该函数以带一些可选参数的字符串形式返回日期:
1.)time:String | 例如:“ + 5分钟”(默认=当前时间)
2。)格式:字符串| 例如:“ Ymd H:i:s”(默认=“ Ymd H:i:s O”)

显然,这不是功能齐全的方法。只是用于修改/格式化当前日期的快速简单功能。

function get_date($time=null, $format='Y-m-d H:i:s O')
{
    if(empty($time))return date($format);
    return date($format, strtotime($time));
}

// Example #1: Return current date in default format
$date = get_date(); 

// Example #2: Add 5 minutes to the current date
$date = get_date("+5 minutes"); 

// Example #3: Subtract 30 days from the current date & format as 'Y-m-d H:i:s'
$date = get_date("-30 days", "Y-m-d H:i:s"); 

0

一个执行此操作的函数的另一个示例:(更改时间和间隔格式,但是您希望根据function.dateDateInterval的格式更改它们):

(我还编写了以下函数替代形式。)

// Return adjusted time.

function addMinutesToTime( $dateTime, $plusMinutes ) {

    $dateTime = DateTime::createFromFormat( 'Y-m-d H:i', $dateTime );
    $dateTime->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
    $newTime = $dateTime->format( 'Y-m-d H:i' );

    return $newTime;
}

$adjustedTime = addMinutesToTime( '2011-11-17 05:05', 59 );

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;

0

一行mysql datetime格式

$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");

-1

不使用变量:

 $yourDate->modify("15 minutes");
 echo $yourDate->format( "Y-m-d H:i");

使用变量:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");

什么$yourDate啊 这个答案与几年前发布的类似答案有什么区别?

尊敬的@ J.Money $ yourDate表示$ variable名称,也许我的回答对100年后的人会有帮助。在问题没有解决之前,我们什么时候应该回答都没有关系。希望您能理解并消除负面标记。
Wajid khan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.