2011-11-17 104 views
49

Sono davvero bloccato con l'aggiunta di X minuti a un datetime, dopo aver fatto un sacco di google'ing e la lettura manuale di PHP, non mi sembra di arrivare da nessuna parte.Aggiunta di minuti alla data e ora in PHP

Il formato data e ora ho è:

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

minuti aggiungere sarà solo un numero compreso tra 0 e 59

desidero l'uscita sia la stessa della formato di input con i minuti aggiunti.

Qualcuno potrebbe darmi un esempio di codice funzionante, visto che i miei tentativi non sembrano portarmi da nessuna parte?

risposta

101
$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'); 
+0

Con Data: 2011-11-18 00:00 se aggiungo 5 minuti, ricevo 2012-04-18 00:00 di conseguenza. ' $ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (new DateInterval ('P'. $ Duration. 'M')); $ endTime = $ time-> format ('Y-m-d H: i'); echo $ endTime; ' Applogie per la formattazione, sembra che non riesca a farlo oggi^_^ –

+0

@LukeB: Spiacente, ho dimenticato un personaggio. Risolto il problema con la mia risposta –

+2

Come è meglio DateTime di strtotime? – bozdoz

12

È possibile farlo con le funzioni native facilmente:

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

mi consiglia il metodo della classe DateTime però, appena pubblicato da Tim.

20
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute'); 
echo date('Y-m-d H:i:s', $newtimestamp); 

risultato è

2011-11-17 05:21:00

live demo è here

Se non sei ancora familiarità con strtotime, è meglio vai a php.net per scoprire che è un grande potere :-)

+1

Uno più comprensibile – NaveenDA

54

La classe DateTime di PHP ha un utile metodo modify che include un testo di facile comprensione.

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

Si potrebbe anche usare l'interpolazione stringa o concatenazione di parametrizzare esso:

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

Più corto e più bello! –

2

Se si vuole dare una variabile che contiene i minuti.

Quindi penso che questo sia un ottimo modo per raggiungere questo obiettivo.

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

Un po 'di una risposta in ritardo, ma il metodo che uso è:

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

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

Come notato da Brad e Nemoden nella loro risposte sopra, strtotime() è una grande funzione. Personalmente, ho trovato l'oggetto DateTime standard troppo complicato per molti casi d'uso. Volevo solo aggiungere 5 minuti all'ora corrente, per esempio.

Ho scritto una funzione che restituisce una data come stringa con alcuni parametri facoltativi:
1.) ora: Stringa | es: "+5 minuti" (valore predefinito = ora corrente)
2.) format: String | ex: "Y-m-d H: i: s" (default = "Y-m-d H: i: s O")

Ovviamente, questo non è un metodo completo. Una semplice e rapida funzione per modificare/formattare la data corrente.

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

ho pensato che questo avrebbe aiutato un po 'quando si tratta di fusi orari troppo. La mia soluzione modificata è basata sulla soluzione di @Tim Cooper, la risposta corretta sopra.

$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 riga in grassetto, riga 3, è l'aggiunta. Spero che questo aiuti anche alcune persone.

0

Un altro esempio di una funzione per fare questo: (cambiando i formati di ora e l'intervallo però loro secondo le this for function.date che ti piace, e this for DateInterval):

(Ho anche scritto un alternate form of the below function.)

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

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


Esempio:

$date = "2017-06-16 08:40:00"; 
$date = strtotime($date); 
$date = strtotime("+5 minute", $date); 
echo date('Y-m-d H:i:s', $date); 
0

Senza l'utilizzo di una variabile:

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

Con l'utilizzo di una variabile:

$interval= 15; 
$yourDate->modify("+{$interval } minutes"); 
echo $yourDate->format("Y-m-d H:i");