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?

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 .


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

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


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.


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.


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

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

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

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;

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

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;

0

einzeiliges MySQL-Datum / Uhrzeit-Format

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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.