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?

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.


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

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 :-)


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.


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.


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

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

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

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;

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

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;

0

format datetime mysql une ligne

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.