Aggiunta di minuti per data e ora in PHP


95

Sono davvero bloccato con l'aggiunta di X minuti a un datetime, dopo aver fatto un sacco di google'ing e lettura manuale di PHP, non mi sembra di andare da nessuna parte.

Il formato della data e dell'ora che ho è:

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

I minuti da aggiungere saranno solo un numero compreso tra 0 e 59

Vorrei che l'output fosse lo stesso del formato di input con i minuti aggiunti.

Qualcuno potrebbe fornirmi un esempio di codice funzionante, poiché i miei tentativi non sembrano portarmi da nessuna parte?

Risposte:


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

Lo standard ISO 8601 per la durata è una stringa nella forma in P{y}Y{m1}M{d}DT{h}H{m2}M{s}Scui le {*}parti vengono sostituite da un valore numerico che indica la durata della durata.

Ad esempio, P1Y2DT5Ssignifica 1 anno, 2 giorni e 5 secondi.

Nell'esempio sopra, stiamo fornendo PT5M(o 5 minuti) al DateIntervalcostruttore.


Con data: 2011-11-18 00:00 se aggiungo 5 minuti, ottengo 2012-04-18 00:00 come risultato. `$ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (new DateInterval ('P'. $ duration. 'M')); $ endTime = $ time-> format ('Ymd H: i'); echo $ endTime; `Applogies per la formattazione, sembra che non riesco a risolvere neanche questo oggi ^ _ ^
Luke B

2
In che modo DateTime è migliore di strtotime?
bozdoz

11
Cosa rappresenta "PT"?
NicholasJohn16

1
@bozdoz Non è questione di quale metodo sia "migliore". strtotimeproduce un timestamp Unix integerche è utile se ad esempio stai ordinando le date in php. La DateTimeclasse fornisce opzioni per operazioni in stile oggetto e procedurale. È più leggibile e ha anche un supporto migliore per la gestione delle differenze tra diversi fusi orari; ad esempio, se si dispone di un progetto che genera date per numerosi fusi orari diversi provenienti dalla stessa istanza di dati.
DrewT

1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Il formato inizia con la lettera P, per "punto". Ogni periodo di durata è rappresentato da un valore intero seguito da un designatore di periodo. Se la durata contiene elementi temporali, quella parte della specifica è preceduta dalla lettera T.
vee

110

La classe DateTime di PHP ha un utile metodo di modifica che accetta testo di facile comprensione.

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

È inoltre possibile utilizzare l'interpolazione o la concatenazione di stringhe per parametrizzarlo:

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

10
Il più breve e il più bello!

1
Entrambe le risposte migliori sono ottime e funzionano bene, ma preferisco questa. Sembra solo più semplice e intuitivo.
HartleySan

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

il risultato è

2011-11-17 05:21:00

La demo live è here

Se non hai ancora familiarità strtotime, è meglio che tu vada php.neta scoprire il suo grande potere :-)


1
Uno dei più comprensivi
Naveen DA

19

Puoi farlo facilmente con le funzioni native:

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

Consiglierei il metodo della classe DateTime, appena pubblicato da Tim.


7

Ho pensato che questo sarebbe stato d'aiuto anche quando si tratta di fusi orari. La mia soluzione modificata si basa 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 linea in grassetto, la linea 3, è l'aggiunta. Spero che questo aiuti anche alcune persone.


4

Una risposta un po 'tardiva, ma il metodo che userei è:

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

3

Se vuoi 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

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

2

Non so perché l'approccio impostato come soluzione non abbia funzionato per me. Quindi sto postando qui cosa ha funzionato per me nella speranza che possa aiutare chiunque:

$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

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

Ho scritto una funzione che restituisce una data come stringa con alcuni parametri opzionali:
1.) time: String | es: "+5 minuti" (impostazione predefinita = ora corrente)
2.) formato: String | es: "Ymd H: i: s" (predefinito = "Ymd H: i: s O")

Ovviamente, questo non è un metodo completo. Solo una funzione semplice e veloce 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"); 

0

Un altro esempio di una funzione per farlo: (cambiando i formati di ora e intervallo come preferisci in base a questo per function.date e questo per DateInterval ):

(Ho anche scritto una forma alternativa della funzione sottostante .)

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

formato datetime mysql a una riga

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

-1

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

Che cos'è $yourDate? Cosa aggiunge questa risposta alle risposte simili pubblicate anni prima?
Nessuno

Caro @ J.Money, $ tuaData significa $ nome variabile e forse la mia risposta sarà utile per qualcuno dopo 100 anni. Non importa quando dobbiamo rispondere fino a quando la domanda non è chiusa. Spero che capirai e rimuoverai il segno negativo.
Wajid khan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.