在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小时内无法接受答复。
答案 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()的本地时间)转换。
在某些版本的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)
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,'.',''));