web-dev-qa-db-fra.com

Ajout de minutes à l'heure de la date en PHP

Je suis vraiment coincé avec l'ajout de X minutes à un datetime, après avoir beaucoup lu sur Google et lu PHP manuellement, je ne semble pas aller nulle part.

Le format de date et heure que j'ai est: 

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

Les minutes à ajouter seront juste un nombre compris entre 0 et 59

Je voudrais que la sortie soit la même que le format d'entrée avec les minutes ajoutées.

Quelqu'un pourrait-il me donner un exemple de code fonctionnel, car mes tentatives ne semblent pas me mener nulle part?

68
Luke B
$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');
125
Tim Cooper

La classe DateTime de PHP a une méthode utile modify qui prend du texte facile à comprendre.

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

Vous pouvez également utiliser une interpolation ou une concaténation de chaînes pour la paramétrer:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");
87
Daniel
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

le résultat est 

2011-11-17 05:21:00

La démo en direct est here

Si vous n'êtes pas familiarisé avec strtotime pour l'instant, vous feriez mieux de vous diriger vers php.net pour découvrir sa puissance :-)

28
Nemoden

Vous pouvez le faire facilement avec les fonctions natives:

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

Je recommanderais cependant la méthode de classe DateTime, récemment publiée par Tim.

16
Brad

Je pensais que cela en aiderait également certains pays. Ma solution modifiée est basée sur la solution de @ Tim Cooper, la réponse correcte ci-dessus.

$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 ligne en gras, ligne 3, est l'addition. J'espère que cela aide aussi certaines personnes.

6
acarito

Une réponse un peu tardive, mais la méthode que j'utiliserais est la suivante:

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

Ou dans 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')
4
Peter

Si vous voulez donner une variable qui contient les minutes.

Ensuite, je pense que c'est un excellent moyen d'y parvenir.

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

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


Exemple:

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

Comme l'ont noté Brad et Nemoden dans leurs réponses ci-dessus, strtotime () est une fonction très utile. Personnellement, j’ai trouvé l’objet DateTime standard trop compliqué pour de nombreux cas d’utilisation. Je voulais juste ajouter 5 minutes à l'heure actuelle, par exemple. 

J'ai écrit une fonction qui renvoie une date sous forme de chaîne avec des paramètres facultatifs:
1.) time: String | ex: "+5 minutes" (par défaut = heure actuelle)
2.) format: String | ex: "Y-m-d H: i: s" (défaut = "Y-m-d H: i: s O")

De toute évidence, ce n'est pas une méthode complète. Juste une fonction simple et rapide pour modifier/formater la date du jour.

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

Sans utiliser une variable:

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

Avec l'utilisation d'une variable:

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

format de date et heure mysql

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

Voici un autre exemple de fonction permettant de faire cela: (en modifiant les formats d'heure et d'intervalle comme vous les aimez en fonction de this pour function.date et de this pour DateInterval ):

(J'ai aussi écrit une forme alternative de la fonction ci-dessous .)

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

Je ne sais pas pourquoi l'approche proposée en tant que solution n'a pas fonctionné pour moi. Donc, je poste ici ce qui a fonctionné pour moi dans l'espoir que cela puisse aider n'importe qui:

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