Eu gostaria de converter uma variável $uptime
que é segundos, em dias, horas, minutos e segundos.
Exemplo:
$uptime = 1640467;
O resultado deve ser:
18 days 23 hours 41 minutes
Isso pode ser alcançado com a DateTime
aula
Usar:
echo secondsToTime(1640467);
# 18 days, 23 hours, 41 minutes and 7 seconds
Função:
function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}
@
significa quando passado como um argumento para oDateTime
construtor?@
é o carimbo de data / hora Unix.Esta é a função reescrita para incluir dias. Eu também mudei os nomes das variáveis para tornar o código mais fácil de entender ...
Fonte: CodeAid () - http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-(php)
fonte
Com base na resposta de Julian Moreno, mas alterado para dar a resposta como uma string (não uma matriz), inclui apenas os intervalos de tempo necessários e não assume o plural.
A diferença entre esta e a resposta mais votada é:
Por
259264
segundos, este código dariaPor
259264
segundos, a resposta mais votada (por Glavić) dariaEspero que isso ajude alguém.
fonte
Aqui está uma função PHP simples de 8 linhas que converte alguns segundos em uma string legível por humanos, incluindo o número de meses para grandes quantidades de segundos:
Função PHP seconds2human ()
fonte
O resultado será 19 23:41:07. Quando é apenas um segundo a mais do que o dia normal, está aumentando o valor do dia para 1 dia. É por isso que mostra 19. Você pode explodir o resultado para suas necessidades e consertar isso.
fonte
$uptime = gmdate("y m d H:i:s", 1640467); $uptimeDetail = explode(" ",$uptime); echo (string)($uptimeDetail[0]-70).' year(s) '.(string)($uptimeDetail[1]-1).' month(s) '.(string)($uptimeDetail[2]-1).' day(s) '.(string)$uptimeDetail[3];
Isso também fornecerá informações sobre o ano e o mês.Existem algumas respostas muito boas aqui, mas nenhuma delas atendeu às minhas necessidades. Eu me baseei na resposta de Glavic para adicionar alguns recursos extras de que precisava;
Você pode ver uma versão em execução do código here.
fonte
Curto, simples, confiável:
fonte
A abordagem mais simples seria criar um método que retornasse um DateInterval de DateTime :: diff do tempo relativo em $ segundos do tempo atual $ now que você pode encadear e formatar. Por exemplo:-
Agora encadeie sua chamada de método em DateInterval :: format
Resultado:
fonte
Embora seja uma questão bastante antiga - pode ser útil (não foi escrita para ser rápida):
resultado:
fonte
fonte
fonte
Solução que deve excluir 0 valores e definir valores singulares / plurais corretos
fonte
uma versão estendida da excelente solução de Glavić , com validação inteira, resolvendo o problema de 1 s e suporte adicional por anos e meses, à custa de ser menos amigável para análise de computador em favor de ser mais amigável para humanos:
var_dump(secondsToHumanReadable(1*60*60*2+1));
->string(16) "2 hours 1 second"
fonte
A aula de intervalo que escrevi pode ser usada. Ele também pode ser usado de maneira oposta.
Mais informações aqui https://github.com/LubosRemplik/CakePHP-Interval
fonte
Com DateInterval :
fonte
Aqui está um código que gosto de usar com o propósito de obter a duração entre duas datas. Aceita duas datas e dá-lhe uma boa resposta estruturada em frases.
Esta é uma versão ligeiramente modificada do código encontrado aqui .
Fonte: https://gist.github.com/ozh/8169202
fonte
Tudo em uma solução. Não dá unidades com zeros. Produzirá apenas o número de unidades que você especificar (3 por padrão). Bastante comprido, talvez não muito elegante. As definições são opcionais, mas podem ser úteis em um grande projeto.
Sinta-se à vontade para votar contra, mas certifique-se de tentar em seu código. Pode ser apenas o que você precisa.
fonte
A solução para este que usei (de volta aos dias enquanto aprendia PHP) sem quaisquer funções internas:
Embora esta seja uma pergunta antiga, novos alunos que se depararem com isso, podem achar esta resposta útil.
fonte
fonte
Estou editando um dos códigos para funcionar bem quando vem um valor negativo.
floor()
função não está fornecendo a contagem correta quando o valor é negativo. Portanto, precisamos usar aabs()
função antes de usá-la nafloor()
função.$inputSeconds
variável pode ser a diferença entre o carimbo de hora atual e a data necessária.fonte
Uma variação da resposta de @Glavić - esta oculta zeros à esquerda para resultados mais curtos e usa plurais nos lugares corretos. Também remove a precisão desnecessária (por exemplo, se a diferença de tempo for superior a 2 horas, você provavelmente não se importa quantos minutos ou segundos).
fonte
Não sei por que algumas dessas respostas são ridiculamente longas ou complexas. Aqui está um usando a classe DateTime . Mais ou menos semelhante à resposta de Radzserg. Isso exibirá apenas as unidades necessárias, e os tempos negativos terão o sufixo 'atrás' ...
EDITAR: Se você quiser condensar o exemplo acima para usar menos variáveis / espaço (em detrimento da legibilidade), aqui está uma versão alternativa que faz a mesma coisa:
fonte
$thetime
no retorno, por exemplo,isset($thetime)
$ value vem do banco de dados. Este código está no Codeigniter. $ SESSION é usado para armazenar assinaturas de usuários. é obrigatório. Eu usei no meu caso, você pode usar o que quiser.
fonte
$value
vem? Por que você meed para apresentar uma sessão? Como isso retorna a string adequada para segundos, minutos e horas?Esta é uma função que usei no passado para subtrair uma data de outra relacionada com a sua pergunta, meu princípio era saber quantos dias, horas, minutos e segundos faltam para que um produto expire:
fonte