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?
$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');
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");
$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 :-)
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.
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.
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')
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");
Utilisez 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);
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");
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");
format de date et heure mysql
$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");
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;
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;