Lepiej jednak upewnij się, że liczba sekund jest mniejsza niż 86 400.
salathe
12
H oznacza liczbę godzin w ciągu jednego dnia. Więc jeśli masz 90000 sekund i użyjesz na nim H, wynik wyniesie 01 (pierwsza godzina następnego dnia). NIE 25 - dziennie są tylko 24 godziny.
MarcinWolny,
7
Nie jestem pewien, czy to jest prawidłowa odpowiedź, spowoduje to datetime... więc jeśli spodziewamy się wyniku> 24 godzin, to nie zadziała. Również jeśli potrzebujemy jakiegoś negatywnego wyniku (na przykład pracy z offsetem), to nie zadziała. -1za skowronek szczegółów
WonderLand
54
To nie powinna być akceptowana odpowiedź z powodu oczywistej wady w przypadku czasów dłuższych niż 24 godziny.
Scott Flack
10
Do użytku z dniami, w których liczby mogą być większe niż 85399, możesz użyć echo gmdate("z H:i:s", 685);z oznacza liczbę dni w roku zaczynającą się od 0. Możesz oczywiście zapoznać się z instrukcją daty php, aby zaspokoić swoje specyficzne potrzeby.
Nightwolf,
177
Jedna godzina to 3600 sekund, jedna minuta to 60 sekund, więc dlaczego nie:
Dobra odpowiedź, ale pamiętaj, aby odjąć $ godziny * 3600 i $ minuty * 60 od $ init pomiędzy każdą operacją, w przeciwnym razie skończysz na podwójnym liczeniu minut i sekund.
Mike Stowe
5
Aby dodać do komentarza @ Amber, użyj przycisku, sprintfaby zwrócić wartość zamiast ją wydrukować.
Allen Butler,
77
proszę bardzo
function format_time($t,$f=':')// t = seconds, f = separator {return sprintf("%02d%s%02d%s%02d", floor($t/3600), $f,($t/60)%60, $f, $t%60);}
echo format_time(685);// 00:11:25
Inne rozwiązania wykorzystują gmdate, ale zawodzą w przypadkach, w których masz więcej niż 86400 sekund. Aby obejść ten problem, możemy po prostu sami obliczyć liczbę godzin, a następnie pozwolić gmdateobliczyć pozostałe sekundy na minuty / sekundy.
@barfoon - prawda, ale wierzę, że o to prosił M.Ezz i jest to standard stosowany w czasie. Z mojego doświadczenia wygląda to dziwnie „3: 7: 5” zamiast „03:07:05”, a nawet „3: 7”, bardziej przypomina mi stosunek.
Kerry Jones,
3
Funkcja gmtdate () nie działała dla mnie, ponieważ śledziłem godziny przepracowane nad projektem, a jeśli to ponad 24 godziny, kwota pozostała po 24 godzinach jest odejmowana. Innymi słowy 37 godzin staje się 13 godzinami. (wszystko jak stwierdzono powyżej przez Glavica - dziękuję za twoje przykłady!) Ten działał dobrze:
Ten kod unika w jak największym stopniu żmudnych wywołań funkcji i tworzenia ciągów kawałek po kawałku, a także dużych i nieporęcznych funkcji, które ludzie wykonują w tym celu.
Tworzy format „1h05m00s” i używa wiodących zer przez minuty i sekundy, o ile poprzedza je inny niezerowy składnik czasu.
I pomija wszystkie puste wiodące komponenty, aby uniknąć podania bezużytecznych informacji, takich jak „0h00m01s” (zamiast tego pojawi się jako „1s”).
Jeśli chcesz, aby kod był jeszcze krótszy (ale mniej czytelny), możesz uniknąć $convertedtablicy i zamiast tego wstawić wartości bezpośrednio do wywołania sprintf () w następujący sposób:
Czas trwania musi wynosić 0 lub więcej w obu powyższych częściach kodu. Negatywne czasy trwania nie są obsługiwane. Ale możesz obsługiwać ujemne czasy trwania, używając zamiast tego następującego kodu alternatywnego:
Pamiętaj, że gmdate()hack jest jeszcze krótszy, ale obsługuje tylko czas trwania do 24 godzin. Coś powyżej 24 godzin nie powiedzie się, jeśli użyjesz sztuczki gmdate!
$given =685;/*
* In case $given == 86400, gmdate( "H" ) will convert it into '00' i.e. midnight.
* We would need to take this into consideration, and so we will first
* check the ratio of the seconds i.e. $given:$number_of_sec_in_a_day
* and then after multiplying it by the number of hours in a day (24), we
* will just use "floor" to get the number of hours as the rest would
* be the minutes and seconds anyways.
*
* We can also have minutes and seconds combined in one variable,
* e.g. $min_sec = gmdate( "i:s", $given );
* But for versatility sake, I have taken them separately.
*/
$hours =( $given >86399)?'0'.floor(( $given /86400)*24)-gmdate("H", $given ): gmdate("H", $given );
$min = gmdate("i", $given );
$sec = gmdate("s", $given );
echo $formatted_string = $hours.':'.$min.':'.$sec;
Jeśli musisz to zrobić w javascript, możesz to zrobić w jednym wierszu kodu, zgodnie z odpowiedzią tutaj. Konwertuj sekundy na HH-MM-SS z JavaScript . Zamień SECONDS na to, co chcesz przekonwertować.
var time =newDate(SECONDS *1000).toISOString().substr(11,8);
Na wypadek, gdyby ktokolwiek szukał prostej funkcji, aby zwrócić ten ładnie sformatowany (wiem, że nie jest to format, o który prosi OP), właśnie to wymyśliłem. Dzięki @mughal za kod, na którym został oparty.
seconds
nadate/time
liczbę godzin lub godzin: minuta: sekundy?Odpowiedzi:
Możesz użyć
gmdate()
funkcji:źródło
datetime
... więc jeśli spodziewamy się wyniku> 24 godzin, to nie zadziała. Również jeśli potrzebujemy jakiegoś negatywnego wyniku (na przykład pracy z offsetem), to nie zadziała.-1
za skowronek szczegółówecho gmdate("z H:i:s", 685);
z oznacza liczbę dni w roku zaczynającą się od 0. Możesz oczywiście zapoznać się z instrukcją daty php, aby zaspokoić swoje specyficzne potrzeby.Jedna godzina to 3600 sekund, jedna minuta to 60 sekund, więc dlaczego nie:
który produkuje:
(Nie testowałem zbyt wiele, więc mogą występować błędy z podłogą lub mniej więcej)
źródło
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
aby zwrócić wartość zamiast ją wydrukować.proszę bardzo
źródło
return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Użyj funkcji
gmdate()
tylko wtedy, gdy sekundy są krótsze niż86400
(1 dzień) :Zobacz: gmdate ()
Uruchom wersję demonstracyjną
Konwertuj sekundy na formatowanie według „stopy” bez limitu * :
Patrz: floor () , sprintf () , operatory arytmetyczne
Uruchom wersję demonstracyjną
Przykładowe zastosowanie
DateTime
rozszerzenia:Patrz: DateTime :: __ construct () , DateTime :: modyfikuj () , klon , sprintf ()
Uruchom wersję demonstracyjną
Przykładowy zakres wyniku
-838:59:59
838:59:59
MySQL jest ograniczony do zakresu danych typu TIME, który wynosi od do :Zobacz: SEC_TO_TIME
Uruchom wersję demonstracyjną
Przykład PostgreSQL:
Uruchom wersję demonstracyjną
źródło
Inne rozwiązania wykorzystują
gmdate
, ale zawodzą w przypadkach, w których masz więcej niż 86400 sekund. Aby obejść ten problem, możemy po prostu sami obliczyć liczbę godzin, a następnie pozwolićgmdate
obliczyć pozostałe sekundy na minuty / sekundy.Wejście:
6030
Wyjście:1:40:30
Wejście:
2000006030
Wyjście:555557:13:50
źródło
źródło
Nie poda czasu w
H:i:s
formacie, jeślino_of_seconds
jest dłuższy niż 1 dzień (sekundy w ciągu dnia).Pominie wartość dzienną i da tylko
Hour:Min:Seconds
Na przykład:
źródło
Oto jedna linijka, która obsługuje sekundy ujemne i sekundy dłuższe niż 1 dzień.
Na przykład:
wyjścia: -26: 03: 04
źródło
Jeśli nie podoba Ci się odpowiedź zaakceptowana lub popularna, spróbuj tego
źródło
Napisz taką funkcję, aby zwrócić tablicę
następnie po prostu wywołaj funkcję w ten sposób:
wyjście jest
źródło
Widzieć:
Od: Konwertuj sekundy na dni, godziny, minuty i sekundy
źródło
Spróbuj tego:
Zrobione z
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
źródło
Funkcja gmtdate () nie działała dla mnie, ponieważ śledziłem godziny przepracowane nad projektem, a jeśli to ponad 24 godziny, kwota pozostała po 24 godzinach jest odejmowana. Innymi słowy 37 godzin staje się 13 godzinami. (wszystko jak stwierdzono powyżej przez Glavica - dziękuję za twoje przykłady!) Ten działał dobrze:
źródło
Ta funkcja może być przydatna, możesz ją rozszerzyć:
źródło
Rozwiązanie od: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
Oto bardzo czysta i krótka metoda!
Ten kod unika w jak największym stopniu żmudnych wywołań funkcji i tworzenia ciągów kawałek po kawałku, a także dużych i nieporęcznych funkcji, które ludzie wykonują w tym celu.
Tworzy format „1h05m00s” i używa wiodących zer przez minuty i sekundy, o ile poprzedza je inny niezerowy składnik czasu.
I pomija wszystkie puste wiodące komponenty, aby uniknąć podania bezużytecznych informacji, takich jak „0h00m01s” (zamiast tego pojawi się jako „1s”).
Przykładowe wyniki: „1s”, „1m00s”, „19m08s”, „1h00m00s”, „4h08m39s”.
Jeśli chcesz, aby kod był jeszcze krótszy (ale mniej czytelny), możesz uniknąć
$converted
tablicy i zamiast tego wstawić wartości bezpośrednio do wywołania sprintf () w następujący sposób:Czas trwania musi wynosić 0 lub więcej w obu powyższych częściach kodu. Negatywne czasy trwania nie są obsługiwane. Ale możesz obsługiwać ujemne czasy trwania, używając zamiast tego następującego kodu alternatywnego:
źródło
gmdate()
hack jest jeszcze krótszy, ale obsługuje tylko czas trwania do 24 godzin. Coś powyżej 24 godzin nie powiedzie się, jeśli użyjesz sztuczki gmdate!Prostym sposobem na użycie DateTime jest:
Jest to proste rozwiązanie, które daje możliwość użycia formatu Method of DateTime.
źródło
W java możesz używać tego w ten sposób.
źródło
źródło
Cóż, potrzebowałem czegoś, co skróciłoby sekundy do godzin, minut i sekund, ale przekroczyłoby 24 godziny, a nie zmniejszyło się do kilku dni.
Oto prosta funkcja, która działa. Prawdopodobnie możesz to poprawić ... Ale oto:
źródło
Aby przekonwertować go na funkcję:
źródło
Jeśli musisz to zrobić w javascript, możesz to zrobić w jednym wierszu kodu, zgodnie z odpowiedzią tutaj. Konwertuj sekundy na HH-MM-SS z JavaScript . Zamień SECONDS na to, co chcesz przekonwertować.
źródło
Jeśli chcesz utworzyć ciąg czasu trwania audio / wideo, taki jak YouTube itp., Możesz:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Zwróci ciągi takie jak:
Prawdopodobnie nie będzie dobrze działać przez czas> = 24 godziny.
źródło
Jest to ładny sposób na zrobienie tego:
źródło
Na wypadek, gdyby ktokolwiek szukał prostej funkcji, aby zwrócić ten ładnie sformatowany (wiem, że nie jest to format, o który prosi OP), właśnie to wymyśliłem. Dzięki @mughal za kod, na którym został oparty.
źródło
Każdy, kto szuka tego w przyszłości, nadaje format pierwotnemu żądanemu plakatowi.
źródło
źródło