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

我真的卡住了,增加 X 分钟的日期时间,在做了大量的谷歌和 PHP 手册阅读后,我似乎没有得到任何地方。

我的日期时间格式是:

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

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

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

有没有人能给我一个可行的代码示例,因为我的尝试似乎没有任何结果?

272566 次浏览
$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');

ISO8601持续时间标准P{y}Y{m1}M{d}DT{h}H{m2}M{s}S形式的字符串,其中 {*}部分被一个表示持续时间长短的数值所替换。

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

In the example above, we are providing PT5M (or 5 minutes) to the DateInterval constructor.

使用本机函数可以很容易地实现这一点:

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

I'd recommend the DateTime class method though, just posted by Tim.

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

结果是

2011-11-1705:21:00

现场演示是 here

如果你还不熟悉 strtotime,你最好去 php.net看看它的强大功率: -)

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");

如果要给出一个包含分钟的变量。

Then I think this is a great way to achieve this.

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

A bit of a late answer, but the method I would use is:

// 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')

正如布拉德和 Nemoden 在上面的答案中指出的那样,strtotime ()是一个很棒的函数。就我个人而言,我发现对于许多用例来说,标准的 DateTime 对象过于复杂。例如,我只是想把当前时间加上5分钟。

我编写了一个函数,它以字符串形式返回一个日期,并带有一些可选参数:
1.) time:String | ex: "+5 minutes" (default = current time)
2.) format: String | ex: “ Y-m-d H: i: s”(default = “ Y-m-d 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");

我认为这对处理时区问题也有帮助。我修改的解决方案是基于@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行是添加的,我希望这对一些人也有帮助。

再举一个函数的例子: (根据 this for function.date这是日期间隔随意改变时间和间隔格式) :

(我还写了一个 下面函数的替代形式。)

// 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;

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


Example:

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

不使用变量:

 $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");

one line mysql datetime format

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

我不知道为什么作为解决方案的方法对我不起作用。 所以我在这里贴出了对我有用的东西,希望它能帮助到任何人:

$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;