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.
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á.
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);
}
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;
}
}
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
Réponse Simple pour PHP:
function exact_time() {
$t = explode(' ',microtime());
return ($t[0] + $t[1]);
}
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. :)
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
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);
}
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.
$timestamp = str_replace(".","",number_format((float)microtime(true),2,'.',''));