web-dev-qa-db-fra.com

Obtenir un timestamp unix en millisecondes en PHP5 et Actionscript3

Dans Actionscript, le timestamp Unix en millisecondes peut être obtenu comme suit:

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

Le doc indique clairement ce qui suit: 

getTime (): Number Renvoie le nombre de millisecondes depuis minuit le 1er janvier 1970, temps universel, pour une date objet.

Lorsque je le trace, il retourne ce qui suit:

824655597

Donc, 824655597/1000/60/60/24/365 = 0,02 ans . Ce n’est évidemment pas correct, car il devrait se situer autour de 39 ans.

Question n ° 1: Qu'est-ce qui ne va pas ici?

Maintenant, passons à la partie PHP: j'essaie également d'obtenir l'horodatage en millisecondes. La fonction microtime() renvoie soit une chaîne (0.29207800 1246365903), soit un float (1246365134.01), en fonction de l’argument donné. Parce que je pensais que les horodatages étaient faciles, j'allais le faire moi-même. Mais maintenant que j'ai essayé et remarqué ce flottant, et que je combine cela avec mes problèmes dans Actionscript, je n'ai vraiment aucune idée.

Question n ° 2: comment dois-je lui faire renvoyer la quantité de millisecondes dans un horodatage Unix?

Les horodatages devraient être si faciles, il me manque probablement quelque chose .. désolé pour ça. Merci d'avance.

EDIT1: Répondu à la première question par moi-même. Voir ci-dessous.
EDIT2: J'ai aussi répondu à la deuxième question. Voir ci-dessous. Impossible d'accepter une réponse dans les 48 heures.

25
Tom

Pour ActionScript3, new Date().getTime() devrait fonctionner.


Dans PHP, vous pouvez simplement appeler time () pour obtenir le temps écoulé depuis le 1er janvier 1970 00:00:00 GMT en secondes. Si vous voulez millisecondes, faites simplement (time()*1000).

Si vous utilisez microtime () , multipliez la seconde partie par 1000 pour obtenir des millisecondes. Multipliez la première partie par 1000 pour obtenir les millisecondes et arrondissez-les. Ajoutez ensuite les deux nombres ensemble. Voila.

17
jitter

J'ai utilisé un entier non signé comme type de retour de la fonction. Cela devrait être le nombre.

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

Pensez que j'ai la fonction pour obtenir des millisecondes en PHP5 maintenant.

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

Utilisez ceci:

intval(microtime(true)*1000)
5
Saurabh Kumar

Pour normaliser un horodatage sous la forme d'un entier avec des millisecondes entre Javascript, Actionscript et 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) );
}

Voir la note PHP dans le commentaire de "ben at sixg dot com" à: http://www.php.net/manual/en/function.gmmktime.php

EXTRAIT: Dans la plupart des cas, vous pouvez imaginer que mktime () convertisse d’abord vos paramètres d’entrée en GMT, puis appelle gmmktime (), ce qui produit un horodatage GMT.

Donc, time () retournera toujours la même chose au même moment, n'importe où dans le monde.
gmmktime () et mktime (), lorsque des paramètres temporels spécifiques sont définis, convertissent ces paramètres temporels à PARTIR du fuseau horaire approprié (GMT pour gmmktime (), heure locale pour mktime ()), avant de calculer l’horodatage approprié.


METTRE À JOUR:

Sur certaines versions de PHP, l'horodatage avec millisecondes est trop volumineux pour être affiché sous forme de chaîne. Utilisez donc la fonction sprintf pour obtenir la valeur de chaîne:

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;
    }
}
5
bob

microtime () dans php5 retourne un timestamp avec microsecondes selon microtime () et si l'argument get_as_float n'est pas fourni, il vous donne une chaîne formatée en "msec sec"; est la deuxième partie. Il suffit de le scinder en deux pour obtenir les deux parties de l'horodatage.

4
Knut Haugen

Réponse simple pour PHP:

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

PHP 7 Cette fonction a son type de retour déclaré.

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);
}
0
Ali Najafi

quand vous avez besoin de la milliseconde au format str, je pense que vous devriez utiliser:

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

cela corrigera le bug dans certains exemples, où la millième est la milliseconde: 0.056. Par exemple, si vous convertissez la milli-part en float, vous obtiendrez 56 au lieu de 056. Je pense que certains veulent 056.

surtout quand vous avez besoin de la milliseconde pour commander des données.

l'espoir aidera. :)

0
Lewison Chen

Pour obtenir un horodatage en millisecondes à partir de l'objet 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
0
John Foley