2013-12-13 25 views
13

Mam formularz, który przyjmuje wartość czasu:PHP Dodawanie 15 minut do wartości czasu

$selectedTime = $_REQUEST['time']; 

czas jest w tym formacie - 9:15:00 - co jest 09:15. Następnie muszę dodać do tego 15 minut i zapisać to w osobnej zmiennej, ale jestem zakłopotany.

Próbuję użyć strtotime bez powodzenia, np .:

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

ale nie analizować.

+0

'strtotime' przekształca datę w datownik. '9: 15: 00' nie jest datą. Po prostu podziel go ręcznie i dodaj 15 minut. – zerkms

+0

Możliwy duplikat http://stackoverflow.com/questions/8169139/adding-minutes-to-date-time-in-php? – Charlie74

+1

@ Charlie74: nie w rzeczywistości.To jest ważna data tam i tylko czas tutaj – zerkms

Odpowiedz

40

Twój kod nie działa (parse) bo masz dodatkową ) na koniec, że powoduje błąd Parse. Policz, masz 2 ( i 3 ). Byłoby dobrze, gdybyś to naprawił, ale strtotime() zwraca znacznik czasu, aby uzyskać czytelny dla człowieka czas użycia date().

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

Get edytor, który będzie podświetlanie składni i pokazać niedopasowane nawiasy, szelki itp

po prostu zrobić prostą czas bez TZ lub DST i dodać 15 minut (czytaj zerkms komentarz):

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

Najważniejszym problemem jest tutaj ).

+0

Ten sam problem, co w innej odpowiedzi - nie uda się przesunąć zegarów czasu letniego, jeśli jakiś czas w pobliżu zmiany minie – zerkms

+0

@zerkms: To jest powód użycia 'strtotime()', ponieważ bierze pod uwagę DST, w przeciwieństwie do dodawania. Najczęściej chcesz uwzględnić DST. Zależy od wymagań. – AbraCadaver

+0

nie można wziąć "DST" na konto tylko na czas. Łańcuch czasu nie jest datą, więc nie można stwierdzić, czy w tym przypadku należy zastosować DST, czy nie. – zerkms

8

Chociaż możesz to zrobić za pomocą funkcji czasu PHP, pozwól, że przedstawię ci klasę PHP DateTime, która wraz z klasami pokrewnymi powinna być w każdym pakiecie programisty 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'); 

Zauważ, że jeśli to, czego szukasz, aby zrobić to w zasadzie stanowią 12 lub 24 godziny funkcje zegara, do którego można dodać/odjąć czas i w rzeczywistości nie dbają o dacie, więc chcesz, aby wyeliminować możliwe problemy wokół półek razy oszczędność zmienia takie polecam jeden z następujących formatów:

!g:i:s 12-godzinny format bez zer na godzinę

!G:i:s 12-godzinny format z wiodącymi zerami

Zwróć uwagę na element ! w formacie. To ustawienie daty komponent do pierwszego dnia w Linux epoki (1-1-1970)

+0

"To prawdopodobnie nie ma znaczenia, jeśli tylko dodasz do tego czasu" - co z czasem letnim? – zerkms

+0

Zakładając, że jest 29 września 2013 r. Dzisiaj: http://ideone.com/siPvIk – zerkms

+0

@zerkms Domyślam się, jak to jest obsługiwane naprawdę zależy od potrzeb PO. Jeśli szukasz tylko 12-godzinnego czasu dodawania funkcjonalności (np. Nie chcesz uwzględniać zmian czasu letniego), możesz ustawić format '! G: i: s' tak, aby zawsze ustawiał datę na czas epoki (1-1-1970), więc nie masz takiej troski. –

0

Aby rozwinąć na poprzednich odpowiedzi, funkcja zrobić, to może działać w ten sposób (zmiana czasu i odstęp formatów jednak chcesz je według this for function.date i this for DateInterval):

(Ja również napisałem 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

Można również użyć poniższego kodu. Jest to dość proste.

$selectedTime = "9:15:00"; 
echo date('h:i:s',strtotime($selectedTime . ' +15 minutes')); 
Powiązane problemy