Agregar minutos a la fecha y hora en PHP

95

Realmente estoy atascado agregando X minutos a una fecha y hora, después de hacer muchas búsquedas en Google y leer manuales de PHP, parece que no estoy llegando a ningún lado.

El formato de fecha y hora que tengo es:

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

Los minutos para agregar serán solo un número entre 0 y 59

Me gustaría que el resultado fuera el mismo que el formato de entrada con los minutos agregados.

¿Alguien podría darme un ejemplo de código que funcione, ya que mis intentos no parecen llevarme a ninguna parte?

Lucas B
fuente

Respuestas:

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

El estándar ISO 8601 para la duración es una cadena en la forma P{y}Y{m1}M{d}DT{h}H{m2}M{s}Sen que las {*}partes se reemplazan por un valor numérico que indica cuánto dura la duración.

Por ejemplo, P1Y2DT5Ssignifica 1 año, 2 días y 5 segundos.

En el ejemplo anterior, estamos proporcionando PT5M(o 5 minutos) al DateIntervalconstructor.

Tim Cooper
fuente
Con fecha: 2011-11-18 00:00 si agrego 5 minutos, obtengo 2012-04-18 00:00 como resultado. `$ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (new DateInterval ('P'. $ duración. 'M')); $ endTime = $ hora-> formato ('Ymd H: i'); echo $ endTime; `Aplicaciones para el formateo, parece que tampoco puedo resolver esto hoy ^ _ ^
Luke B
2
¿Cómo es DateTime mejor que strtotime?
bozdoz
11
¿Qué representa 'PT'?
NicholasJohn16
1
@bozdoz No se trata de qué método es "mejor". strtotimeproduce una marca de tiempo de Unix como una integerque es útil si, por ejemplo, está ordenando fechas en php. La DateTimeclase proporciona opciones para operaciones de estilo de procedimiento y objeto. Es más legible y también tiene mejor soporte para manejar diferencias entre diferentes zonas horarias; por ejemplo, si tiene un proyecto que genera fechas para numerosas zonas horarias diferentes provenientes de la misma instancia de datos.
DrewT
1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> El formato comienza con la letra P, para "punto". Cada período de duración está representado por un valor entero seguido de un designador de período. Si la duración contiene elementos de tiempo, esa parte de la especificación está precedida por la letra T.
vee
110

La clase DateTime de PHP tiene un método de modificación útil que toma texto fácil de entender.

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

También puede usar la interpolación o concatenación de cadenas para parametrizarlo:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");
Daniel
fuente
10
¡La más corta y bonita!
1
Las dos respuestas principales son excelentes y funcionan bien, pero prefiero esta. Simplemente parece más simple e intuitivo.
HartleySan
38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

el resultado es

2011-11-17 05:21:00

La demostración en vivo es here

Si aún no está familiarizado strtotime, es mejor que se dirija php.neta descubrir su gran poder :-)

Nemoden
fuente
1
El más comprensivo
Naveen DA
19

Puede hacer esto con funciones nativas fácilmente:

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

Sin embargo, recomendaría el método de clase DateTime, que acaba de publicar Tim.

Puntilla
fuente
7

Pensé que esto también ayudaría a algunos cuando se trata de zonas horarias. Mi solución modificada se basa en la solución de @Tim Cooper, la respuesta correcta anterior.

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

La línea en negrita, línea 3, es la adición. Espero que esto también ayude a algunas personas.

acarito
fuente
4

Una respuesta un poco tardía, pero el método que usaría es:

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

O en 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')
Pedro
fuente
3

Si quieres dar una variable que contenga los minutos.

Entonces creo que esta es una excelente manera de lograrlo.

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

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


Ejemplo:

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

No sé por qué el enfoque establecido como solución no funcionó para mí. Así que estoy publicando aquí lo que funcionó para mí con la esperanza de que pueda ayudar a cualquiera:

$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;
usuario3361395
fuente
1

Como señalaron Brad y Nemoden en sus respuestas anteriores, strtotime () es una gran función. Personalmente, encontré que el objeto DateTime estándar es demasiado complicado para muchos casos de uso. Solo quería agregar 5 minutos a la hora actual, por ejemplo.

Escribí una función que devuelve una fecha como una cadena con algunos parámetros opcionales:
1.) hora: Cadena | ej .: "+5 minutos" (predeterminado = hora actual)
2.) formato: Cadena | ej .: "Ymd H: i: s" (predeterminado = "Ymd H: i: s O")

Obviamente, este no es un método con todas las funciones. Solo una función rápida y sencilla para modificar / formatear la fecha actual.

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"); 
Robert Schwindaman
fuente
0

Un ejemplo más de una función para hacer esto: (cambiando los formatos de tiempo e intervalo como desee de acuerdo con esto para function.date , y esto para DateInterval ):

(También escribí una forma alternativa de la siguiente función ).

// 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;
FirstFraktal
fuente
0

formato de fecha y hora mysql de una línea

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

Sin usar una variable:

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

Con el uso de una variable:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");
Wajid Khan
fuente
¿Qué es $yourDate? ¿Qué agrega esta respuesta a las respuestas similares publicadas años antes?
Ninguno
Estimado @ J.Money $ yourDate significa $ nombre de variable y tal vez mi respuesta sea útil para alguien después de 100 años. No importa cuándo debamos responder hasta que la pregunta no esté cerrada. Espero que comprenda y elimine las marcas negativas.
Wajid khan