Ottenere un timestamp unix in millisecondi in PHP5 e Actionscript3

In Actionscript, il timestamp Unix in millisecondi è ottenibile in questo modo:

public static function getTimeStamp():uint { var now:Date = new Date(); return now.getTime(); } 

Il documento afferma chiaramente quanto segue:

getTime (): Number Restituisce il numero di millisecondi dalla mezzanotte del 1 gennaio 1970, ora universale, per un object Date.

Quando lo rintraccia, restituisce il seguente:

 824655597 

Quindi, 824655597/1000/60/60/24/365 = 0,02 anni. Questo ovviamente non è corretto, come dovrebbe essere circa 39 anni.

Domanda n. 1: Cosa c'è che non va qui?

Ora, nella parte PHP: sto cercando di get anche il timestamp in millisecondi. La function microtime() restituisce una string (0.29207800 1246365903) o una variabile (1246365134.01), a seconda dell'argomento specificato. Perché pensavo che i timestamp fossero facili, stavo per farlo da solo. Ma ora che ho provato e notato questo float e lo combino con i miei problemi in Actionscript, non ne ho davvero idea.

Domanda n. 2: come devo renderlo restituisce la quantità di millisecondi in un timestamp Unix?

I timestamp dovrebbero essere così facili, probabilmente mi manca qualcosa .. mi dispiace per quello. Grazie in anticipo.

EDIT1: ho risposto alla prima domanda da solo. Vedi sotto.
EDIT2: risposta alla seconda domanda anche da solo. Vedi sotto. Non posso accettare risposta entro 48 ore.

Per actionscript3, new Date().getTime() dovrebbe funzionare.


In PHP puoi semplicemente call time () per far passare il tempo dal 1 ° gennaio 1970 alle 00:00:00 GMT in secondi. Se vuoi fare millisecondi (time()*1000) .

Se usi microtime () moltiplica la seconda parte con 1000 per get millisecondi. Moltiplicare la prima parte con 1000 per get i millisecondi e arrotondare. Quindi aggiungi i due numbers insieme. Ecco.

Ho usato numbers interi senza segno come tipo di return della function. Questo dovrebbe essere il numero.

 public static function getTimeStamp():Number { var now:Date = new Date(); return now.getTime(); } 

Credo di avere la function per get millisecondi in PHP5 ora.

 function msTimeStamp() { return round(microtime(1) * 1000); } 

Per normalizzare un timestamp come un integer con millisecondi tra Javascript, Actionscript e PHP

Javascript / Actionscript:

 function getTimestamp(){ var d = new Date(); return Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()).valueOf(); } 

PHP:

 function getTimestamp(){ $seconds = microtime(true); // true = float, false = weirdo "0.2342 123456" format return round( ($seconds * 1000) ); } 

Vedi nota PHP al commento "ben a sixg dot com" su: http://www.php.net/manual/en/function.gmmktime.php

ECCETTO: Per la maggior parte degli intenti e degli scopi puoi immaginare che mktime () converta prima i tuoi parametri di input in GMT e poi chiama gmmktime () che produce un timestamp GMT.

Quindi, time () restituirà sempre la stessa cosa nello stesso momento, in qualsiasi parte del mondo.
gmmktime () e mktime (), quando vengono forniti parametri temporali specifici, converti i parametri temporali DAL fuso orario appropriato (GMT per gmmktime (), ora locale per mktime ()), prima di calcolare il timestamp appropriato.


AGGIORNARE:

Su alcune versioni di PHP, il timestamp con millisecondi è troppo grande per essere visualizzato come una string. Quindi usa la function sprintf per get il valore della string:

PHP

 function getTimestamp($asString=false){ $seconds = microtime(true); // false = int, true = float $stamp = round($seconds * 1000); if($asString == true){ return sprintf('%.0f', $stamp); } else { return $stamp; } } 

microtime () in php5 restituisce timestamp unix con microsecondi come per microtime () e se l'argomento get_as_float non è fornito, fornisce una string formattata come "msec sec", quindi la prima parte è la parte in millisecondi e la seconda è la seconda parte . Basta dividerlo in due e ottieni le due parti del timestamp

Usa questo:

 intval(microtime(true)*1000) 

Risposta semplice per PHP:

 function exact_time() { $t = explode(' ',microtime()); return ($t[0] + $t[1]); } 

Qualcosa come questo:

$mili_sec_time = $_SERVER['REQUEST_TIME_FLOAT'] * 1000;

Fornisce il tipo float che rappresenta i millisecondi dall'epoca UNIX agli inizi della richiesta.

quando hai bisogno del millisecondo nel formato str, penso che dovresti usare:

 public function get_millisecond() { list($milliPart, $secondPart) = explode(' ', microtime()); $milliPart = substr($milliPart, 2, 3); return $secondPart . $milliPart; } 

questo risolverà il bug int alcuni ottengono esempio in millisecondi where è la parte milli: 0.056. qualche esempio converti la parte milli in float, otterrai 56 invece di 056. Penso che qualcuno voglia 056.

soprattutto quando hai bisogno del millisecondo per ordinare alcuni dati.

la speranza ti aiuterà 🙂

Per get il timestamp in millisecondi dall'object DateTime di PHP:

 <?php date_default_timezone_set('UTC'); $d = new \DateTime('some_data_string'); $mts = $d->getTimestamp().substr($d->format('u'),0,3); // millisecond timestamp 

PHP 7 Questa function ha dichiarato il tipo di reso.

 function timestamp_ms(): int { $times = gettimeofday(); $seconds = strval($times["sec"]); $milliseconds = strval(floor($times["usec"]/1000)); $missingleadingzeros = 3-strlen($milliseconds); if($missingleadingzeros >0){ for($i = 0; $i < $missingleadingzeros; $i++){ $milliseconds = '0'.$milliseconds; } } return intval($seconds.$milliseconds); } 

PHP 5

 function timestamp_ms() { $times = gettimeofday(); $seconds = strval($times["sec"]); $milliseconds = strval(floor($times["usec"]/1000)); $missingleadingzeros = 3-strlen($milliseconds); if($missingleadingzeros >0){ for($i = 0; $i < $missingleadingzeros; $i++){ $milliseconds = '0'.$milliseconds; } } return intval($seconds.$milliseconds); } 
 $timestamp = str_replace(".","",number_format((float)microtime(true),2,'.',''));