É melhor garantir que o número de segundos esteja abaixo de 86.400.
Salathe 03/07/10
12
H representa a quantidade de horas em um único dia. Portanto, se você tiver 90000 segundos e usar H, o resultado será 01 (primeira hora do dia seguinte). NÃO 25 - existem apenas 24 horas por dia.
MarcinWolny
7
Não sei se essa é a resposta certa, isso produzirá um datetime... então, se esperamos resultados> 24 horas, não funcionará. Além disso, se precisarmos de algum resultado negativo (por exemplo, trabalhar com deslocamento), ele não funcionará. -1para a cotovia dos detalhes
WonderLand
54
Esta não deve ser a resposta aceita devido à falha óbvia em períodos superiores a 24 horas.
Scott Flack
10
Para uso em dias em que os números podem ser maiores que 85399, você pode usar echo gmdate("z H:i:s", 685);z é a quantidade de dias no ano começando com 0. Você pode obviamente revisar o manual do php date para atender às suas necessidades específicas.
Nightwolf
177
Uma hora é 3600seg, um minuto é 60seg, por que não:
Boa resposta, mas certifique-se de subtrair $ horas * 3600 e $ minutos * 60 de $ init entre cada operação, caso contrário, você terminará duplicando a contagem de minutos e segundos.
Mike Stowe
5
Para adicionar ao comentário de @ Amber, use sprintfpara retornar o valor em vez de imprimi-lo.
Allen Butler
77
aqui está
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
Não funciona para valores negativos. Se você tiver um intervalo negativo de segundos, use o seguinte:return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Ajax
66
Use a função gmdate()somente se os segundos forem menores que 86400(1 dia) :
Outras soluções são usadas gmdate, mas falham nos casos extremos em que você tem mais de 86400 segundos. Para contornar isso, podemos simplesmente calcular o número de horas, e depois gmdatecalcular os segundos restantes em minutos / segundos.
Não inteiramente certo, mas eu tenho certeza que ele está se pondo o tempo para 0 e, em seguida, nada em cima do que seria simplesmente a resposta correta
@ barfoon - verdade, mas acredito que é isso que M.Ezz estava pedindo, e é um padrão usado no tempo. Isso parece estranho da minha experiência "3: 7: 5" em vez de "03:07:05" ou mesmo "3: 7", parece mais uma proporção para mim.
Kerry Jones
3
A função gmtdate () não funcionou para mim, pois eu estava acompanhando as horas trabalhadas em um projeto e, se houver mais de 24 horas, você terá o valor restante após 24 horas ser subtraído. Em outras palavras, 37 horas passam a 13 horas. (tudo como declarado acima por Glavic - obrigado por seus exemplos!) Este funcionou bem:
Esse código evita, tanto quanto possível, as chamadas de função tediosas e a construção de strings peça por peça, e as funções grandes e volumosas que as pessoas estão fazendo para isso.
Ele produz o formato "1h05m00s" e usa zeros à esquerda por minutos e segundos, desde que outro componente de tempo diferente de zero os preceda.
E ignora todos os componentes principais vazios para evitar fornecer informações inúteis como "0h00m01s" (em vez disso, elas aparecerão como "1s").
Resultados de exemplo: "1s", "1m00s", "19m08s", "1h00m00s", "4h08m39s".
Se você deseja tornar o código ainda mais curto (mas menos legível), evite a $convertedmatriz e, em vez disso, coloque os valores diretamente na chamada sprintf (), da seguinte maneira:
A duração deve ser 0 ou superior nas duas partes do código acima. Durações negativas não são suportadas. Mas você pode lidar com durações negativas usando o seguinte código alternativo:
Observe que o gmdate()hack é ainda mais curto que isso, mas suporta apenas durações de até 24 horas. Qualquer coisa acima de 24 horas falhará se você usar o truque gmdate!
gw0
1
Uma maneira simples de usar o DateTime para isso é:
$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;
Se você precisar fazer isso em javascript, poderá fazê-lo em apenas uma linha de código, conforme respondido aqui. Converter segundos em HH-MM-SS com JavaScript . Substitua SECONDS pelo que você deseja converter.
var time =newDate(SECONDS *1000).toISOString().substr(11,8);
Apenas no caso de alguém procurar uma função simples para retornar isso bem formatado (eu sei que não é o formato solicitado pelo OP), é isso que acabei de criar. Obrigado a @mughal pelo código em que foi baseado.
seconds
em umadate/time
ou para uma quantidade de horas: minuto: segundos?Respostas:
Você pode usar a
gmdate()
função:fonte
datetime
... então, se esperamos resultados> 24 horas, não funcionará. Além disso, se precisarmos de algum resultado negativo (por exemplo, trabalhar com deslocamento), ele não funcionará.-1
para a cotovia dos detalhesecho gmdate("z H:i:s", 685);
z é a quantidade de dias no ano começando com 0. Você pode obviamente revisar o manual do php date para atender às suas necessidades específicas.Uma hora é 3600seg, um minuto é 60seg, por que não:
que produz:
(Eu não testei muito, por isso pode haver erros com o piso ou mais)
fonte
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
para retornar o valor em vez de imprimi-lo.aqui está
fonte
return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Use a função
gmdate()
somente se os segundos forem menores que86400
(1 dia) :Veja: gmdate ()
Execute a demonstração
Converta segundos para formatar por 'pé' sem limite * :
Veja: floor () , sprintf () , operadores aritméticos
Execute a demonstração
Exemplo de uso da
DateTime
extensão:Veja: DateTime :: __ construct () , DateTime :: modify () , clone , sprintf ()
Execute a demonstração
O intervalo de
-838:59:59
838:59:59
exemplo do MySQL do resultado é restrito ao do tipo de dados TIME, que é de para :Consulte: SEC_TO_TIME
Execute a demonstração
Exemplo do PostgreSQL:
Execute a demonstração
fonte
Outras soluções são usadas
gmdate
, mas falham nos casos extremos em que você tem mais de 86400 segundos. Para contornar isso, podemos simplesmente calcular o número de horas, e depoisgmdate
calcular os segundos restantes em minutos / segundos.Entrada:
6030
Saída:1:40:30
Entrada:
2000006030
Saída:555557:13:50
fonte
fonte
Não dará tempo no
H:i:s
formato seno_of_seconds
for maior que 1 dia (segundos em um dia).Negligenciará o valor do dia e dará apenas
Hour:Min:Seconds
Por exemplo:
fonte
Aqui está um liner que lida com segundos negativos e mais de 1 dia em segundos.
Por exemplo:
saídas: -26: 03: 04
fonte
Se você não gosta de respostas aceitas ou populares, tente esta
fonte
função de gravação como esta para retornar uma matriz
então simplesmente chame a função assim:
saída é
fonte
Vejo:
De: converter segundos em dias, horas, minutos e segundos
fonte
Tente o seguinte:
Retirado de
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
fonte
A função gmtdate () não funcionou para mim, pois eu estava acompanhando as horas trabalhadas em um projeto e, se houver mais de 24 horas, você terá o valor restante após 24 horas ser subtraído. Em outras palavras, 37 horas passam a 13 horas. (tudo como declarado acima por Glavic - obrigado por seus exemplos!) Este funcionou bem:
fonte
Esta função pode ser útil, você pode estendê-la:
fonte
Solução de: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
Aqui está um método muito limpo e curto!
Esse código evita, tanto quanto possível, as chamadas de função tediosas e a construção de strings peça por peça, e as funções grandes e volumosas que as pessoas estão fazendo para isso.
Ele produz o formato "1h05m00s" e usa zeros à esquerda por minutos e segundos, desde que outro componente de tempo diferente de zero os preceda.
E ignora todos os componentes principais vazios para evitar fornecer informações inúteis como "0h00m01s" (em vez disso, elas aparecerão como "1s").
Resultados de exemplo: "1s", "1m00s", "19m08s", "1h00m00s", "4h08m39s".
Se você deseja tornar o código ainda mais curto (mas menos legível), evite a
$converted
matriz e, em vez disso, coloque os valores diretamente na chamada sprintf (), da seguinte maneira:A duração deve ser 0 ou superior nas duas partes do código acima. Durações negativas não são suportadas. Mas você pode lidar com durações negativas usando o seguinte código alternativo:
fonte
gmdate()
hack é ainda mais curto que isso, mas suporta apenas durações de até 24 horas. Qualquer coisa acima de 24 horas falhará se você usar o truque gmdate!Uma maneira simples de usar o DateTime para isso é:
É uma solução simples que permite usar o formato Método de DateTime.
fonte
Em java, você pode usar dessa maneira.
fonte
fonte
Bem, eu precisava de algo que reduzisse segundos em horas, minutos e segundos, mas excederia 24 horas e não reduziria ainda mais em dias.
Aqui está uma função simples que funciona. Você provavelmente pode melhorá-lo ... Mas aqui está:
fonte
Para convertê-lo em uma função:
fonte
Se você precisar fazer isso em javascript, poderá fazê-lo em apenas uma linha de código, conforme respondido aqui. Converter segundos em HH-MM-SS com JavaScript . Substitua SECONDS pelo que você deseja converter.
fonte
Se você deseja criar uma sequência de duração de áudio / vídeo como o YouTube etc., você pode:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Retornará strings como:
Provavelmente não funcionará bem por tempo> = 24 horas.
fonte
Esta é uma maneira bonita de fazer isso:
fonte
Apenas no caso de alguém procurar uma função simples para retornar isso bem formatado (eu sei que não é o formato solicitado pelo OP), é isso que acabei de criar. Obrigado a @mughal pelo código em que foi baseado.
fonte
Quem procura isso no futuro, fornece o formato que o pôster inicial solicitou.
fonte
fonte