2016-08-04 127 views
0

在PHP microtime()中返回“microsec sec”中的字符串。在javascript或angularjs中使用PHP microtime()

php microtime() 

如: '0.48445100 1470284726'

在JavaScript中存在的microtime()没有默认功能。
这么分的返回类型,其中sec是使用date.getTime()返回秒值UNIX时间戳,如:

var date = new Date(); 
var timestamp = Math.round(date.getTime()/1000 | 0); 

那么如何让JavaScript中的“微秒”的价值。

+2

的可能的复制微秒决议[确实的JavaScript提供高分辨率定时器?](http://stackoverflow.com/questions/6875625/does-javascript-provide-a-high-resolution - 时间) –

+0

从日期中减去舍入日期? – zerkms

+0

你真的想用这个做什么? JS给你毫秒分辨率时间戳。这不是微秒的分辨率,所以以某种方式划分它并不会让你感到满意。什么是用例? – deceze

回答

6

在PHP microtime实际上为您提供了微秒级分辨率的秒数。

JavaScript使用毫秒而不是秒为其时间戳,因此您只能以毫秒分辨率获取小数部分。

但是为了得到这一点,你就只取时间标记,除以1000,并得到其余的,就像这样:

var microtime = (Date.now() % 1000)/1000; 

对于一个更完整的实现的PHP功能,你可以这样做这(从PHP.js缩短):

function microtime(getAsFloat) { 
    var s, 
     now = (Date.now ? Date.now() : new Date().getTime())/1000; 

    // Getting microtime as a float is easy 
    if(getAsFloat) { 
     return now 
    } 

    // Dirty trick to only get the integer part 
    s = now | 0 

    return (Math.round((now - s) * 1000)/1000) + ' ' + s 
} 

编辑: 使用较新的高分辨率时间API这是宝ssible获得在most modern browsers

function microtime(getAsFloat) { 
    var s, now, multiplier; 

    if(typeof performance !== 'undefined' && performance.now) { 
     now = (performance.now() + performance.timing.navigationStart)/1000; 
     multiplier = 1e6; // 1,000,000 for microseconds 
    } 
    else { 
     now = (Date.now ? Date.now() : new Date().getTime())/1000; 
     multiplier = 1e3; // 1,000 
    } 

    // Getting microtime as a float is easy 
    if(getAsFloat) { 
     return now; 
    } 

    // Dirty trick to only get the integer part 
    s = now | 0; 

    return (Math.round((now - s) * multiplier)/multiplier) + ' ' + s; 
} 
+0

thanq Flygenring – Harish98

+0

如果你使用这个来获得一个看似随机数,正如问题的评论中所提到的那样,建议不要使用产生微秒的方法,因为它似乎没有太好的工作。然而! – Flygenring