time()
está em segundos - há um em milissegundos?
php
time
milliseconds
COMer
fonte
fonte
time()
.microtime(true)
por outro lado, retorna o tempo atual em segundos desde que a época do Unix precisa até o microssegundo mais próximo (consulte a referência do PHP). Na verdade, é muito fácil testar se você executa o código acima em um loop e exibe os milissegundos.microtime(true) / 1000
(divisão em vez de multiplicação múltipla)?Use
microtime
. Esta função retorna uma string separada por um espaço. A primeira parte é a parte fracionária de segundos, a segunda parte é a parte integrante. Passetrue
para obter como um número:Cuidado com a perda de precisão se você usar
microtime(true)
.Também há
gettimeofday
que retorna a parte de microssegundos como um número inteiro.fonte
microtime()
é igual1000*time()
, certo?1000
, certo?microtime(true)
e1000*time()
1000*time()
não lhe dará milissegundos.microtime(true)
retorna umfloat
que possui 14 dígitos de precisão. A parte dos segundos já levava 10, deixando 4 dígitos para a parte dos microssegundos. Isso deve ser suficiente, já que os milissegundos requerem apenas 3 dígitos extras.Resposta curta:
Apenas plataformas de 64 bits!
[ Se você estiver executando PHP de 64 bits, a constante será
PHP_INT_SIZE
igual a8
]Resposta longa:
Se você deseja uma função equilibrada
time()
em milissegundos primeiro, considere que, comotime()
retorna o número de segundos decorridos desde o "tempo da época" (01/01/1970), o número de milissegundos desde o "tempo da época" é um número grande e não cabe em um número inteiro de 32 bits.O tamanho de um número inteiro no PHP pode ser de 32 ou 64 bits, dependendo da plataforma.
Em http://php.net/manual/en/language.types.integer.php
Se você tiver números inteiros de 64 bits, poderá usar a seguinte função:
microtime()
retorna o número de segundos desde o "tempo da época" com precisão de até microssegundos com dois números separados por espaço, como ...O segundo número é o segundo (inteiro), enquanto o primeiro é a parte decimal.
A função acima
milliseconds()
leva a parte inteira multiplicada por1000
em seguida, adiciona a parte decimal multiplicada por
1000
e arredondada para 0 casas decimaisObserve que ambos
$mt[1]
e o resultado deround
são convertidos paraint
. Isso é necessário porque eles são sefloat
a operação neles sem conversão resultaria no retorno da função afloat
.Finalmente, essa função é um pouco mais precisa do que
isso com uma proporção de 1:10 (aprox.) retorna 1 milissegundo a mais do que o resultado correto. Isso ocorre devido à precisão limitada do tipo de flutuação (
microtime(true)
retorna uma flutuação). De qualquer forma, se você ainda preferir o mais curtoround(microtime(true)*1000);
, sugiro transmitirint
o resultado.Mesmo que esteja além do escopo da pergunta, vale ressaltar que se sua plataforma suportar números inteiros de 64 bits, você também poderá obter o tempo atual em microssegundos sem incorrer no estouro.
Se o fato
2^63 - 1
(maior número inteiro assinado) dividido por10^6 * 3600 * 24 * 365
(aproximadamente os microssegundos em um ano) der292471
.Esse é o mesmo valor que você obtém
Em outras palavras, um número inteiro assinado de 64 bits tem espaço para armazenar um período de tempo superior a 200.000 anos medido em microssegundos.
Você pode ter então
fonte
Como já foi dito, você pode usar
microtime()
para obter precisão de milissegundos nos registros de data e hora.A partir dos seus comentários, você parece desejá-lo como um carimbo de data / hora UNIX de alta precisão. Algo como
DateTime.Now.Ticks
no mundo .NET.Você pode usar a seguinte função para fazer isso:
fonte
Use
microtime(true)
no PHP 5 ou a seguinte modificação no PHP 4:Uma maneira portátil de escrever esse código seria:
fonte
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
resultado:
2016-11-19 15:12:34.346351
fonte
$t = gettimeofday(); echo date('Y-m-d H:i:s.',$t['sec']) . $t['usec'];
$timeofday=gettimeofday(); echo sprintf("%s.%06d", date('Y-m-d H:i:s', $timeofday['sec']), $timeofday['usec']);
tente isto:
fonte
Isso funciona mesmo se você estiver no PHP de 32 bits:
Observe que isso não fornece números inteiros, mas strings. No entanto, isso funciona bem em muitos casos, por exemplo, ao criar URLs para solicitações REST.
Se você precisar de números inteiros, o PHP de 64 bits é obrigatório.
Então você pode reutilizar o código acima e converter para (int):
Ou você pode usar as boas e velhas one-liners:
fonte
Espero que isso ajude você.
fonte
fonte
PHP 5.2.2 <
PHP 7.0.0 <7.1
fonte
Usa isto:
Tchau
fonte