在PHP5和Actionscript3中获取unix时间戳(以毫秒为单位)

时间:2009-06-30 12:54:15

标签: php actionscript-3 unix timestamp

在Actionscript中,Unix时间戳(以毫秒为单位)可以这样获得:

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

该文件明确指出以下内容:

  

getTime():Number返回的数字   从1月1日午夜开始的毫秒   1970年,世界时间,为约会   对象

当我追踪它时,它会返回以下内容:

824655597

所以,824655597 / 1000/60/60/24/365 = 0.02年。 这显然是不正确的,因为它应该是大约39年。

问题#1:这里有什么问题?

现在,在PHP部分:我正在尝试以毫秒为单位获取时间戳。 microtime()函数返回字符串(0.29207800 1246365903)或浮点数(1246365134.01),具体取决于给定的参数。因为我觉得时间戳很简单,所以我自己会这样做。但是现在我已经尝试并注意到了这个浮点数,并将其与我在Actionscript中的问题结合起来,我真的没有任何线索。

问题2:如何让它返回Unix时间戳中的毫秒数?

时间戳应该很容易,我可能会遗漏一些东西......对不起。提前谢谢。

EDIT1:我自己回答了第一个问题。见下文。
EDIT2:我自己也回答了第二个问题。见下文。 48小时内无法接受答复。

12 个答案:

答案 0 :(得分:16)

对于actionscript3,new Date().getTime()应该有效。


在PHP中,您只需拨打time()即可获得自1970年1月1日00:00:00 GMT以来的时间。如果你想要毫秒,只需(time()*1000)

如果使用microtime()将第二部分与1000相乘,则得到毫秒。将第一部分乘以1000得到毫秒数并将其舍入。然后将两个数字加在一起。瞧。

答案 1 :(得分:14)

我使用无符号整数作为函数的返回类型。这应该是数字。

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

想想我现在获得了PHP5中获得毫秒的功能。

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

答案 2 :(得分:5)

将时间戳标准化为整数,Javascript,Actionscript和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) );
}

请参阅“ben at sixg dot com”的PHP注释:http://www.php.net/manual/en/function.gmmktime.php

摘录: 对于大多数意图和目的,您可以想象mktime()首先将输入参数转换为GMT,然后调用生成GMT时间戳的gmmktime()。

所以,time()总会在世界任何地方的同一时刻返回相同的东西 gmmktime()和mktime(),当给定特定的时间参数时,在计算适当的时间戳之前,将这些时间参数从适当的时区(gmmktime的GMT(),mktime()的本地时间)转换。


UPDATE:

在某些版本的PHP上,带有毫秒的时间戳太大而无法显示为字符串。因此,使用sprintf函数获取字符串值:

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

答案 3 :(得分:5)

使用此:

intval(microtime(true)*1000)

答案 4 :(得分:4)

php5中的

microtime()按照microtime()返回unix时间戳和微秒,如果没有提供get_as_float参数,它会给你一个格式为“msec sec”的字符串,所以第一部分是毫秒部分,第二部分是第二部分。只需将它分成两部分即可得到时间戳的两部分

答案 5 :(得分:2)

PHP的简单答案:

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

答案 6 :(得分:0)

当你需要str格式的毫秒时,我认为你应该使用:

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

这将修复bug一些毫秒的例子,其中milli部分是:0.056。一些例子将milli部分转换为float,你将获得56而不是056.我认为有人想要056。

特别是当你需要毫秒来订购一些数据时。

希望能有所帮助。 :)

答案 7 :(得分:0)

从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

答案 8 :(得分:0)

PHP 7 此函数声明了其返回类型。

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);
}

答案 9 :(得分:0)

我最近遇到这个问题,以毫秒为单位获取时间戳。仅将unix时间戳乘以1000并不能解决问题,因为我必须非常精确地比较两个数据库条目。显然,php datetime对象无法处理毫秒/微秒,但无论如何它都存储在datetime字符串中。所以这是我的解决方案:

$dateObject = new \DateTime('2015-05-05 12:45:15.444', new \DateTimeZone('Europe/London')); $millis = $dateObject->format('v'); echo $dateObject->getTimestamp()*1000+$millis;

如果您使用format->('u')(当然也将时间戳乘以1000000),这也应该以微秒为单位。我希望这对您有用。

答案 10 :(得分:-1)

这样的事情:

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

给出浮点类型,表示从UNIX纪元到请求开始的毫秒数。

答案 11 :(得分:-1)

$timestamp = str_replace(".","",number_format((float)microtime(true),2,'.',''));