【问题标题】:PHP microtime() in javascript or angularjsjavascript 或 angularjs 中的 PHP microtime()
【发布时间】:2016-12-10 01:32:28
【问题描述】:

在 PHP microtime() 中以“微秒秒”返回字符串。

php microtime()

例如:'0.48445100 1470284726'

在 JavaScript 中,microtime() 没有默认函数。
如此划分返回类型,其中sec为unix时间戳,使用date.getTime()返回sec值,eg:

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

那么如何在 JavaScript 中获取 'microsec' 值。

【问题讨论】:

  • 从一个日期中减去一个四舍五入的日期?
  • 你真的想用这个做什么? JS 为您提供毫秒分辨率的时间戳。这不是微秒级的分辨率,所以以某种方式划分它不会让你得到那个。用例是什么?
  • 目的需要创建oauth_nonce来生成url。但是在 PHP 中有一个默认的函数使用 microtime(),弄不清楚用什么方法来替换 javascript 中的 microtime。
  • 那么你真正需要的只是一个随机数

标签: javascript php datetime time


【解决方案1】:

在 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,可以在 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;
}

【讨论】:

  • 如果你使用它来获得一个看似随机的数字,正如 cmets 对问题所问的那样,建议不要使用产生微秒的方法,因为它似乎做得不太好一份工作呢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多