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

95

Je suis vraiment coincé avec l'ajout de X minutes à un datetime, après avoir fait beaucoup de google et de lecture manuelle de PHP, je ne semble pas aller nulle part.

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

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

Les minutes à ajouter ne seront qu'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?

Luc B
la source

Réponses:

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

La norme ISO 8601 pour la durée est une chaîne sous la forme P{y}Y{m1}M{d}DT{h}H{m2}M{s}Soù les {*}parties sont remplacées par une valeur numérique indiquant la durée de la durée.

Par exemple, P1Y2DT5Ssignifie 1 an, 2 jours et 5 secondes.

Dans l'exemple ci-dessus, nous fournissons PT5M(ou 5 minutes) au DateIntervalconstructeur.

Tim Cooper
la source
Avec la date: 2011-11-18 00:00 si j'ajoute 5 minutes, j'obtiens le 18/04/2012 00:00 en conséquence. `$ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (new DateInterval ('P'. $ duration. 'M')); $ endTime = $ time-> format ('Ymd H: i'); echo $ endTime; `Applogies pour le formatage, il semble que je ne puisse pas résoudre ce problème non plus aujourd'hui ^ _ ^
Luke B
2
En quoi DateTime est-il meilleur que strtotime?
bozdoz du
11
Que représente «PT»?
NicholasJohn16
1
@bozdoz Ce n'est pas une question de savoir quelle méthode est "meilleure". strtotimeproduit un horodatage Unix comme un integerqui est utile si vous triez par exemple les dates en php. La DateTimeclasse fournit des options pour les opérations d'objet et de style procédural. Il est plus lisible et prend également en charge la gestion des différences entre les différents fuseaux horaires; par exemple, si vous avez un projet qui génère des dates pour de nombreux fuseaux horaires différents provenant de la même instance de données.
DrewT
1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Le format commence par la lettre P, pour "période". Chaque période de durée est représentée par une valeur entière suivie d'un indicateur de période. Si la durée contient des éléments de temps, cette partie de la spécification est précédée de la lettre T.
vee
110

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

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

Vous pouvez également utiliser l'interpolation ou la concaténation de chaîne pour le paramétrer:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");
Daniel
la source
10
Le plus court et le plus beau!
1
Les deux principales réponses sont excellentes et fonctionnent bien, mais je préfère celle-ci. Cela semble juste plus simple et plus intuitif.
HartleySan le
38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

le résultat est

17/11/2011 05:21:00

La démo en direct est here

Si vous n'êtes pas encore familier avec strtotime, vous feriez mieux php.netde découvrir sa grande puissance :-)

Nemoden
la source
1
Le plus compréhensif
Naveen DA
19

Vous pouvez le faire facilement avec des fonctions natives:

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

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

Brad
la source
7

J'ai pensé que cela aiderait certains à traiter des fuseaux horaires aussi. Ma solution modifiée est basée sur la solution de @Tim Cooper, la bonne réponse 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, la ligne 3, est l'addition. J'espère que cela aidera également certaines personnes.

acarito
la source
4

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

// 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 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')
Peter
la source
3

Si vous souhaitez donner une variable contenant 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");
Beaudinn Greve
la source
2

Utilisation 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);
DeathRs
la source
2

Je ne sais pas pourquoi l'approche définie comme solution n'a pas fonctionné pour moi. Je poste donc 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;
user3361395
la source
1

Comme l'ont noté Brad et Nemoden dans leurs réponses ci-dessus, strtotime () est une excellente fonction. Personnellement, j'ai trouvé que l'objet DateTime standard était 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 quelques paramètres optionnels:
1.) time: String | ex: "+5 minutes" (par défaut = heure actuelle)
2.) format: Chaîne | ex: "Ymd H: i: s" (par défaut = "Ymd H: i: s O")

De toute évidence, ce n'est pas une méthode complète. Juste une fonction simple et rapide pour modifier / mettre en forme la date actuelle.

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
la source
0

Un autre exemple de fonction pour faire ceci: (changer les formats d'heure et d'intervalle comme vous les aimez en fonction de ceci pour function.date , et ceci pour DateInterval ):

(J'ai également é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;
FirstFraktal
la source
0

format datetime mysql une ligne

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

Sans utiliser de 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");
Wajid Khan
la source
Qu'est-ce que c'est $yourDate? Qu'est-ce que cette réponse ajoute aux réponses similaires publiées des années auparavant?
Aucun
Cher @ J.Money $ yourDate signifie $ nom de variable et peut-être que ma réponse sera utile pour quelqu'un après 100 ans. Peu importe le moment où nous devons répondre tant que la question n'est pas close. J'espère que vous comprendrez et supprimerez le marquage négatif.
Wajid khan