Hinzufügen von Minuten zur aktuellen Uhrzeit in PHP

93

Ich bin wirklich fest entschlossen, einer Datumszeit X Minuten hinzuzufügen. Nachdem ich viel googelt und PHP manuell gelesen habe, komme ich anscheinend nicht weiter.

Das Datum und Uhrzeitformat, das ich habe, ist:

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

Das Hinzufügen von Minuten ist nur eine Zahl zwischen 0 und 59

Ich möchte, dass die Ausgabe dem Eingabeformat mit den hinzugefügten Minuten entspricht.

Könnte mir jemand ein funktionierendes Codebeispiel geben, da meine Versuche mich anscheinend nicht weiterbringen?

Luke B.
quelle

Antworten:

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

Die Norm ISO 8601 für die Dauer ist eine Zeichenfolge in Form der Stelle, P{y}Y{m1}M{d}DT{h}H{m2}M{s}San der die {*}Teile durch einen Zahlenwert ersetzt werden, der angibt, wie lang die Dauer ist.

Bedeutet beispielsweise P1Y2DT5S1 Jahr, 2 Tage und 5 Sekunden.

Im obigen Beispiel stellen wir PT5Mdem DateIntervalKonstruktor (oder 5 Minuten) zur Verfügung .

Tim Cooper
quelle
Mit Datum: 2011-11-18 00:00 Wenn ich 5 Minuten hinzufüge, erhalte ich als Ergebnis 2012-04-18 00:00. $ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (neues DateInterval ('P'. $ duration. 'M')); $ endTime = $ time-> format ('Ymd H: i'); echo $ endTime; `Applogies für die Formatierung, es scheint, ich kann das auch heute nicht herausfinden ^ _ ^
Luke B
2
Wie ist DateTime besser als strtotime?
Bozdoz
11
Was bedeutet "PT"?
NicholasJohn16
1
@bozdoz Es geht nicht darum, welche Methode "besser" ist. strtotimeerzeugt einen Unix-Zeitstempel als, integerder hilfreich ist, wenn Sie beispielsweise Datumsangaben in PHP sortieren. Die DateTimeKlasse bietet Optionen für Operationen im Objekt- und prozeduralen Stil. Es ist besser lesbar und bietet auch eine bessere Unterstützung für den Umgang mit Unterschieden zwischen verschiedenen Zeitzonen. Wenn Sie beispielsweise ein Projekt haben, das Daten für zahlreiche verschiedene Zeitzonen ausgibt, die aus derselben Dateninstanz stammen.
DrewT
1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Das Format beginnt mit dem Buchstaben P für "Punkt". Jede Dauerperiode wird durch einen ganzzahligen Wert gefolgt von einem Periodenbezeichner dargestellt. Wenn die Dauer Zeitelemente enthält, wird diesem Teil der Spezifikation der Buchstabe T vorangestellt
vee
109

Die DateTime-Klasse von PHP verfügt über eine nützliche Änderungsmethode , die leicht verständlichen Text enthält.

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

Sie können auch die Zeichenfolgeninterpolation oder -verkettung verwenden, um sie zu parametrisieren:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");
Daniel
quelle
10
Am kürzesten und am schönsten!
1
Beide Top-Antworten sind großartig und funktionieren gut, aber ich bevorzuge diese. Scheint einfach einfacher und intuitiver.
HartleySan
38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

Ergebnis ist

2011-11-17 05:21:00

Live-Demo ist here

Wenn Sie noch nicht vertraut sind strtotime, sollten Sie besser php.netentdecken, dass es eine großartige Kraft ist :-)

Nemoden
quelle
1
Am verständnisvollsten
NaveenDA
19

Sie können dies mit nativen Funktionen einfach tun:

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

Ich würde jedoch die DateTime-Klassenmethode empfehlen, die gerade von Tim gepostet wurde.

Brad
quelle
7

Ich dachte, dies würde einigen helfen, wenn es auch um Zeitzonen geht. Meine modifizierte Lösung basiert auf der Lösung von @Tim Cooper, der richtigen Antwort oben.

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

Die fette Linie, Linie 3, ist die Ergänzung. Ich hoffe, das hilft auch einigen Leuten.

Acarito
quelle
4

Eine etwas späte Antwort, aber die Methode, die ich verwenden würde, ist:

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

Oder in 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
quelle
3

Wenn Sie eine Variable angeben möchten, die die Minuten enthält.

Dann denke ich, dass dies ein großartiger Weg ist, um dies zu erreichen.

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

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


Beispiel:

$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
quelle
2

Ich weiß nicht, warum der als Lösung festgelegte Ansatz bei mir nicht funktioniert hat. Also poste ich hier, was für mich funktioniert hat, in der Hoffnung, dass es jedem helfen kann:

$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
quelle
1

Wie Brad und Nemoden in ihren obigen Antworten festgestellt haben, ist strtotime () eine großartige Funktion. Ich persönlich fand das Standard-DateTime-Objekt für viele Anwendungsfälle zu kompliziert. Ich wollte zum Beispiel nur 5 Minuten zur aktuellen Zeit hinzufügen.

Ich habe eine Funktion geschrieben, die ein Datum als Zeichenfolge mit einigen optionalen Parametern zurückgibt:
1.) Zeit: Zeichenfolge | Beispiel: "+5 Minuten" (Standard = aktuelle Zeit)
2.) Format: String | Beispiel: "Ymd H: i: s" (Standard = "Ymd H: i: s O")

Offensichtlich ist dies keine voll funktionsfähige Methode. Nur eine schnelle und einfache Funktion zum Ändern / Formatieren des aktuellen Datums.

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
quelle
0

Ein weiteres Beispiel für eine Funktion, um dies zu tun: (Ändern der Zeit- und Intervallformate, wie Sie sie möchten, entsprechend für function.date und dies für DateInterval ):

(Ich habe auch eine alternative Form der folgenden Funktion geschrieben .)

// 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
quelle
0

einzeiliges MySQL-Datum / Uhrzeit-Format

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

Ohne Verwendung einer Variablen:

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

Mit der Verwendung einer Variablen:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");
Wajid Khan
quelle
Was ist $yourDate? Was trägt diese Antwort zu den ähnlichen Antworten bei, die vor Jahren veröffentlicht wurden?
Keine
Lieber @ J.Money $ yourDate bedeutet $ Variablenname und vielleicht ist meine Antwort nach 100 Jahren für jemanden hilfreich. Es spielt keine Rolle, wann wir antworten sollten, bis die Frage nicht geschlossen ist. Ich hoffe, Sie werden negative Markierungen verstehen und entfernen.
Wajid Khan