Obtenir l'horodatage unix en millisecondes dans PHP5 et Actionscript3

Dans Actionscript, L'horodatage Unix en millisecondes peut être obtenu comme ceci:

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.

Quand je le trace, il renvoie ce qui suit:

824655597

Donc, 824655597 / 1000 / 60 / 60 / 24 / 365 = 0.02 des années. Ce n'est évidemment pas correct, car il devrait être autour de 39 an.

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

Maintenant, sur la partie PHP: j'essaie d'obtenir l'horodatage en millisecondes là aussi. La fonction microtime() renvoie une chaîne (0.29207800 1246365903) ou 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 ai remarqué ce flotteur, et les combiner avec mes problèmes dans Actionscript je n'ai vraiment aucune idée.

Question # 2: Comment dois-je le faire retourner la quantité de millisecondes dans un horodatage Unix?

Les horodatages devraient être si faciles, il me manque probablement quelque chose.. désolé à ce sujet. Merci à l'avance.

EDIT1: a répondu à la première question par moi-même. Voir ci-dessous.
EDIT2: a également répondu à la deuxième question par moi-même. Voir ci-dessous. Ne peut pas accepter la réponse dans les 48 heures.

25
demandé sur hakre 2009-06-30 16:54:15

11 réponses

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


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

Si vous utilisez microtime () multipliez la deuxième partie par 1000 pour obtenir des millisecondes. Multipliez la première partie avec 1000 pour obtenir les millisecondes et arrondir cela. Ensuite, ajoutez les deux nombres ensemble. Voilá.

17
répondu jitter 2013-03-22 20:27:33

J'ai utilisé unsigned integer 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();
        }

Je pense avoir la fonction pour obtenir des millisecondes dans PHP5 maintenant.

function msTimeStamp() {
    return round(microtime(1) * 1000);
}
14
répondu Tom 2009-06-30 13:38:46

Pour normaliser un horodatage sous forme d'entier en 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 à "ben at sixg dot com" commentaire à: http://www.php.net/manual/en/function.gmmktime.php

Extrait: Pour la plupart des fins, vous pouvez imaginer que mktime() convertit d'abord vos paramètres D'entrée en GMT, puis appelle gmmktime () qui produit un horodatage GMT.

Donc, time () retournera toujours la même chose au même moment réel, n'importe où dans le monde.
gmmktime () et mktime (), lorsqu'ils sont donnés des paramètres de temps spécifiques, convertissent ces paramètres de temps du fuseau horaire approprié (GMT pour gmmktime (), heure locale pour mktime ()), avant de calculer l'horodatage approprié.


Mise à jour:

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

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
répondu bob 2012-09-15 08:16:02

Utilisez ceci:

intval(microtime(true)*1000)
5
répondu Saurabh Kumar 2014-07-02 11:52:42

Microtime () dans php5 renvoie l'horodatage unix avec des 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" donc la première partie est la partie milliseconde et la seconde est la deuxième partie. Il suffit de le diviser en deux et vous obtenez les deux parties de l'horodatage

4
répondu Knut Haugen 2009-06-30 13:10:06

Réponse Simple pour PHP:

function exact_time() {
    $t = explode(' ',microtime());
    return ($t[0] + $t[1]);
}
2
répondu Dave Crooke 2014-01-22 18:44:05

Lorsque 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 un exemple de milliseconde où la partie milli est comme: 0.056. un exemple convertit la partie milli en float, vous obtiendrez 56 au lieu de 056. Je pense que quelqu'un veut 056.

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

L'espoir aidera. :)

0
répondu Lewison Chen 2015-06-26 09:26:39

Pour obtenir l'horodatage milliseconde 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
répondu John Foley 2016-10-25 19:35:02

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
répondu Ali Najafi 2017-11-10 17:35:10

Quelque Chose comme ceci:

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

Donne le type float représentant les millisecondes de L'époque UNIX au début de la requête.

-1
répondu Dalibor 2012-12-25 22:36:55
$timestamp = str_replace(".","",number_format((float)microtime(true),2,'.',''));
-1
répondu user3835050 2014-07-13 21:31:23