Obtener la marca de tiempo de Unix en milisegundos en PHP5 y Actionscript3
actionscript-3 timestamp (11)
Algo como esto:
$mili_sec_time = $_SERVER[''REQUEST_TIME_FLOAT''] * 1000;
Otorga el tipo de letra flotante que representa milisegundos desde UNIX epoch al inicio de la solicitud.
En Actionscript, la marca de tiempo de Unix en milisegundos se puede obtener de esta manera:
public static function getTimeStamp():uint
{
var now:Date = new Date();
return now.getTime();
}
El documento establece claramente lo siguiente:
getTime (): Number Devuelve el número de milisegundos desde la medianoche del 1 de enero de 1970, hora universal, para un objeto Date.
Cuando lo rastreo, devuelve lo siguiente:
824655597
Entonces, 824655597/1000/60/60/24/365 = 0.02 años. Esto obviamente no es correcto, ya que debería ser alrededor de 39 años.
Pregunta # 1: ¿Qué pasa aquí?
Ahora, en la parte de PHP: estoy tratando de obtener la marca de tiempo en milisegundos allí también. La función microtime()
devuelve una cadena (0.29207800 1246365903) o un flotador (1246365134.01), dependiendo del argumento dado. Porque pensé que las marcas de tiempo eran fáciles, lo haría yo mismo. Pero ahora que lo he intentado y notado, y lo combino con mis problemas en Actionscript, realmente no tengo ni idea.
Pregunta n. ° 2: ¿cómo debo hacer para devolver la cantidad de milisegundos en una marca de tiempo Unix?
Los sellos de tiempo deberían ser tan fáciles, probablemente me esté perdiendo algo ... lo siento. Gracias por adelantado.
EDIT1: Respondió la primera pregunta por mi cuenta. Vea abajo.
EDIT2: respondí la segunda pregunta por mi mismo también. Vea abajo. No puedo aceptar la respuesta dentro de las 48 horas.
PHP 7 Esta función tiene su tipo de devolución declarada.
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);
}
Para actionscript3, new Date().getTime()
debería funcionar.
En PHP, simplemente puede llamar a time() para obtener el tiempo transcurrido desde el 1 de enero de 1970 00:00:00 GMT en segundos. Si quiere milisegundos, simplemente hágalo (time()*1000)
.
Si usa microtime() multiplique la segunda parte por 1000 para obtener milisegundos. Multiplique la primera parte con 1000 para obtener los milisegundos y redondee eso. Luego agrega los dos números juntos. Voilá.
Para normalizar una marca de tiempo como un entero con milisegundos entre Javascript, Actionscript y 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) );
}
Vea la nota de PHP en el comentario de "ben at sixg dot com" en: http://www.php.net/manual/en/function.gmmktime.php
EXTRACTO: Para la mayoría de los propósitos, puedes imaginar que mktime () primero convierte tus parámetros de entrada a GMT y luego llama a gmmktime () que produce una marca de tiempo GMT.
Entonces, el tiempo () siempre devolverá lo mismo en el mismo momento real, en cualquier parte del mundo.
gmmktime () y mktime (), cuando se le dan parámetros de tiempo específicos, convierta esos parámetros de tiempo DESDE la zona horaria apropiada (GMT para gmmktime (), hora local para mktime ()), antes de calcular la marca de tiempo apropiada.
ACTUALIZAR:
En algunas versiones de PHP, la marca de tiempo con milisegundos es demasiado grande para mostrarse como una cadena. Entonces usa la función sprintf para obtener el valor de la cadena:
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;
}
}
Para obtener la marca de tiempo de milisegundos del objeto PHP DateTime:
<?php
date_default_timezone_set(''UTC'');
$d = new /DateTime(''some_data_string'');
$mts = $d->getTimestamp().substr($d->format(''u''),0,3); // millisecond timestamp
Respuesta simple para PHP:
function exact_time() {
$t = explode('' '',microtime());
return ($t[0] + $t[1]);
}
Utilicé un entero sin signo como el tipo de retorno de la función. Este debería ser el Número.
public static function getTimeStamp():Number
{
var now:Date = new Date();
return now.getTime();
}
Creo que ahora tengo la función de obtener milisegundos en PHP5.
function msTimeStamp() {
return round(microtime(1) * 1000);
}
Utilizar esta:
intval(microtime(true)*1000)
cuando necesitas el milisegundo en formato str, creo que deberías usar:
public function get_millisecond() {
list($milliPart, $secondPart) = explode('' '', microtime());
$milliPart = substr($milliPart, 2, 3);
return $secondPart . $milliPart;
}
esto arreglará el error int. algunos obtienen un ejemplo de milisegundo donde la parte milli es como: 0.056. algún ejemplo convierte la parte milli en flotación, obtendrás 56 en lugar de 056. Creo que alguien quiere 056.
especialmente cuando necesitas el milisegundo para pedir algunos datos.
la esperanza ayudará :)
microtime () en php5 devuelve la marca de tiempo unix con microsegundos según microtime() y si no se proporciona el argumento get_as_float, le da una cadena formateada como "msec sec", por lo que la primera parte es la parte de milisegundos y la segunda es la segunda parte . Solo divídelo en dos y obtienes las dos partes de la marca de tiempo
$timestamp = str_replace(".","",number_format((float)microtime(true),2,''.'',''''));