2012-02-11 16 views
5

ho 13 cifre e voglio creare la data e l'ora con includono milisecondCrea 3 millisecondi cifre con PHP

codice di esempio è così questo è il mio script php

$mil = 1328910295939; 
$seconds = $mil/1000; 
$showdate = date('Y:m:d H:i:s', $seconds) ; 

echo "$showdate"; 

il risultato è come questo 2012: 02: 10 15: 44: 55.xxx ===> xxx è di 3 cifre in millisecondi che voglio mostrare.

e come includere con 3 milisecond cifra dopo H: i: s

Please help me .....

risposta

6

Che ne dici di qualcosa del genere?

$mil = 1328910295939; 

function toTimestamp($milliseconds) 
{ 
    $seconds = $milliseconds/1000; 
    $remainder = round($seconds - ($seconds >> 0), 3) * 1000; 

    return date('Y:m:d H:i:s.', $seconds).$remainder; 
} 

echo toTimestamp($mil); 

Tadaa!

Anche questo dovrebbe essere abbastanza veloce.

Inoltre, questo è l'output: 2012:02:10 15:44:55.939 - perché non si sta utilizzando - per delimitare la parte della data mi batte.

+0

Grazie amico ... ottimo lavoro. sei il migliore, perché iam cercando una settimana in internet non ha soluzione. – Smith

+0

Ciao westie ho avuto ancora problemi l'ora HOUR era 2 ore più veloce ... esempio 22: 07: 45.434 un'ORA dovrebbe essere 20. – Smith

+0

Questo è un problema con il vostro server - sarà necessario impostare il fuso orario. – Westie

5

Basta tagliare gli ultimi due caratteri:

substr(date('Y-m-d H:i:s.u',1328910295939), 0, -2) 
+0

Sul mio sistema, questo evalutes a "2025/12/10 22: 17: 55.0000" (PHP 5.3.6 su Ubuntu) – iblue

+0

non funziona ancora ... per favore aiutami iam congelare con questo. – Smith

+0

questo è il mio script php $ mil = 1328910295939; $ secondi = $ mil/1000; $ showdate = date ('Y: m: d H: i: s', $ secondi); echo "$ showdate"; il risultato è come questo 2012: 02: 10 15:44:55 e come includere con 3 milisecond cifra dopo H: i: s – Smith

4

Ecco una funzione che farà per voi precisione (con arrotondamento, non tagliare):

function getTimestamp() 
{ 
     $microtime = floatval(substr((string)microtime(), 1, 8)); 
     $rounded = round($microtime, 3); 
     return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded)); 
} 

fornire i chiarimenti nazione:

microtime() restituisce 2 numeri come 1 stringa, delimitata da uno spazio. il secondo numero è il numero di secondi dall'epoca unix, e il primo numero è il numero di microsecondi dal secondo numero. Fondamentalmente, il primo numero è la quantità di microsecondi espressi in un formato di precisione 8 (0,00000000) e gli 0s finali non vengono mai interrotti.

Si arrotonda questo valore a una precisione di 3 (0,00) e si taglia lo 0 iniziale e si aggiunge al timestamp effettivo.

Per qualche motivo il php doc per u, microsecondi, non sembra essere effettivamente supportato. Ottengo 0.000 ogni volta quando si utilizza quel metodo. Così ho fatto ricorso a microtime() come soluzione di backup.

+0

codice di esempio è così questo è il mio script php $ mil = 1328910295939; $ secondi = $ mil/1000; $ showdate = date ('Y: m: d H: i: s', $ secondi); echo "$ showdate"; il risultato è così 2012: 02: 10 15: 44: 55.xxx ===> xxx è di 3 cifre in millisecondi che voglio mostrare. – Smith

+1

Il formato 'u' è supportato per le date che contengono microsecondi (ad esempio istanze' DateTime'). La funzione 'date()' funziona solo con i timestamp interi, quindi non conosce i secondi frazionari. – salathe

1
$t = 1328910295939; 
echo date('Y-m-d H:i:s.', substr($t, 0, -3)) . substr($t, -3); 

uscita: 2012-02-10 16:44:55.939 (dipende dal fuso orario)

0

Poiché queste risposte erano tutte molto divertente nella loro complessità, ecco ennesimo risposta per il futuro i posteri che utilizza il codice originale del richiedente e doesn' t trattare i numeri come stringhe.

$mil = 1328910295939; 
$seconds = floor($mil/1000); 
$fraction = $mil % 1000; 
$showdate = date('Y:m:d H:i:s',$seconds) . ".$fraction"; 

echo "$mil<br> 
$seconds<br> 
$fraction<br> 
$showdate"; 

Uscite quanto segue su un server impostato sul fuso orario EST:

1328910295939 
1328910295 
939 
2012:02:10 16:44:55.939 
Problemi correlati