2013-12-13 12 views
13

Ho una forma che riceve un valore di tempo:PHP Aggiunta di 15 minuti per il valore Tempo

$selectedTime = $_REQUEST['time']; 

Il tempo è in questo formato - 09:15:00 - che è 09:15. Devo quindi aggiungere 15 minuti a questo e archiviarlo in una variabile separata, ma sono perplesso.

Sto cercando di utilizzare strtotime senza successo, ad es .:

$endTime = strtotime("+15 minutes",strtotime($selectedTime))); 

ma che non analizzare.

+0

'strtotime' converte una data in un timestamp. '9: 15: 00' non è una data. Basta dividerlo manualmente e aggiungere 15 minuti – zerkms

+0

Possibile duplicato di http://stackoverflow.com/questions/8169139/adding-minutes-to-date-time-in-php? – Charlie74

+1

@ Charlie74: non in realtà.È una data valida lì e solo il tempo qui – zerkms

risposta

40

Il codice non funziona (parse) perché avete un extra ) alla fine che causa un errore Parse. Conta, hai 2 ( e 3 ). Funzionerebbe bene se lo aggiusti, ma strtotime() restituisce un timestamp, quindi per ottenere un tempo leggibile dall'uomo usa date().

$selectedTime = "9:15:00"; 
$endTime = strtotime("+15 minutes", strtotime($selectedTime)); 
echo date('h:i:s', $endTime); 

Ottenere un editor che evidenziazione della sintassi e mostrare parentesi senza eguali, bretelle, ecc

Per fare solo tempo dritto senza alcuna TZ o DST e aggiungere 15 minuti (leggi zerkms commento):

$endTime = strtotime($selectedTime) + 900; //900 = 15 min X 60 sec 

Ancora, lo ) è il problema principale qui.

+0

Lo stesso problema di un'altra risposta: fallisce in estate quando gli orologi cambiano se viene passato un po 'di tempo vicino allo spostamento – zerkms

+0

@zerkms: questa è la ragione per usare 'strtotime()' come tiene in considerazione l'ora legale, a differenza dell'aggiunta. La maggior parte delle volte si desidera prendere in considerazione l'ora legale. Dipende dal requisito – AbraCadaver

+0

non puoi prendere 'DST' in considerazione solo per il tempo. La stringa temporale non è una data, quindi non è possibile stabilire se in questo caso è necessario applicare o meno l'ora legale. – zerkms

8

Sebbene sia possibile farlo tramite le funzioni temporali di PHP, permettetemi di presentarvi la classe DateTime di PHP, che insieme alle sue classi correlate, dovrebbe trovarsi in qualsiasi toolkit per sviluppatori PHP.

// note this will set to today's current date since you are not specifying it in your passed parameter. This probably doesn't matter if you are just going to add time to it. 
$datetime = DateTime::createFromFormat('g:i:s', $selectedTime); 
$datetime->modify('+15 minutes'); 
echo $datetime->format('g:i:s'); 

Nota che se quello che stai cercando di fare è fondamentalmente fornire una funzionalità di orologio 12 o 24 ore a cui è possibile aggiungere/sottrarre tempo e in realtà non si preoccupano la data, così si vuole eliminare possibili problemi intorno botte salvare volte cambia un tale mi sento di raccomandare uno dei seguenti formati:

!g:i:s formato 12 ore senza zeri iniziali su un'ora

!G:i:s formato 12 ore con zeri

Nota l'articolo ! in formato. Questo set di componenti data del primo giorno in Linux epoca (1-1-1970)

+0

"Probabilmente non importa se si aggiungerà del tempo" - per quanto riguarda l'ora legale? – zerkms

+0

Supponendo che sia il 29 settembre 2013 oggi: http://ideone.com/siPvIk – zerkms

+0

@zerkms Immagino che ciò sia gestito in realtà dipende dalle esigenze dell'OP. Se stai solo cercando una funzionalità di aggiunta di 12 ore (ovvero non vuoi tenere conto delle modifiche all'ora legale), puoi impostare il formato '! G: i: s' per impostare sempre la data su epoch time (1-1-1970) in modo da non avere una tale preoccupazione. –

0

di espandere risposte precedenti, una funzione per fare questo potrebbe funzionare in questo modo (cambiare il tempo e formati di intervallo come più vi piace loro secondo le this for function.date, e this for DateInterval):

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

// Return adjusted time. 

function addMinutesToTime($time, $plusMinutes) { 

    $time = DateTime::createFromFormat('g:i:s', $time); 
    $time->add(new DateInterval('PT' . ((integer) $plusMinutes) . 'M')); 
    $newTime = $time->format('g:i:s'); 

    return $newTime; 
} 

$adjustedTime = addMinutesToTime('9:15:00', 15); 

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL; 
0

È anche possibile utilizzare il codice riportato di seguito.È abbastanza semplice.

$selectedTime = "9:15:00"; 
echo date('h:i:s',strtotime($selectedTime . ' +15 minutes')); 
Problemi correlati