如何在JavaScript中获得百万分之一秒? “FFFFFFF”

时间:2014-04-02 18:16:49

标签: javascript

我需要这样的日期格式:yyyy-MM-dd_HH.mm.ss.fffffff

我试过这个:

var currentdate = new Date();
var fileName = currentdate.getFullYear() + '-'
   + currentdate.getMonth() + '-'
   + currentdate.getDate() + '_'
   + currentdate.getHours() + '.'
   + currentdate.getMinutes() + '.'
   + currentdate.getSeconds() + '.'
   + currentdate.getMilliseconds();

输出为:2014-3-2_23.0.29.840

我怎样才能获得百万分之一秒所以我的输出会如下所示?

2014-3-2_23.0.29.8401111

由于某些原因,我无法使用诸如moment.js之类的库。

感谢。

2 个答案:

答案 0 :(得分:4)

Date对象不能管理超过毫秒的精度,但是,最近浏览器已经开始实现方法performance.now(),它返回“一个DOMHighResTimeStamp,以毫秒为单位,精确到一个千分之一毫秒等于自PerformanceTiming.navigationStart属性以来的毫秒数

有一篇有趣的帖子here

我修改了帖子中包含的now()函数,以便与Date.now()类似,但更精确:http://jsfiddle.net/aTpD5/3/

总结一下,这是实现它的代码:

var now = (function() {

  // Returns the number of milliseconds elapsed since either the browser navigationStart event or 
  // the UNIX epoch, depending on availability.
  // Where the browser supports 'performance' we use that as it is more accurate (microsoeconds
  // will be returned in the fractional part) and more reliable as it does not rely on the system time. 
  // Where 'performance' is not available, we will fall back to Date().getTime().

  var performance = window.performance || {};

  performance.now = (function() {
    return performance.now    ||
    performance.webkitNow     ||
    performance.msNow         ||
    performance.oNow          ||
    performance.mozNow        ||
    function() { return new Date().getTime(); };
  })();

  if (performance.timing) {
        return performance.timing.navigationStart + performance.now();
  }

  return performance.now();         

});

now()函数以毫秒为单位返回毫秒,类似于:“1396464605263.821ms”要格式化它,您可以使用以下代码:

var exactNow = now();
$('#output').text(exactNow + 'ms')
var isostr = new Date(exactNow).toISOString().replace(/T/, " ");
// You can increase the precision changing the 6 by a higher number
var fractionms = ('' + (exactNow % 1)).substring(2, 6);
isostr = isostr.substring(0, isostr.length - 1) + fractionms;
$('#output2').text(isostr)

以前的代码会显示如下内容:

1396465845046.267ms
2014-04-02 19:10:45.0462670

此功能在Safari上不起作用,但它应该适用于其他现代浏览器:

  • Chrome:20+(webkit)
  • Firefox:15.0+(Gecko)
  • Internet Explorer:10.0 +
  • Opera:15.0 +
  • Safari:不支持(在OSX中的7.0.3上测试)

答案 1 :(得分:0)

不幸的是,没有这样的功能来检索当前的纳秒。理想情况下,你会写一个额外的一行:

+ currentDate.getNanoseconds() * 10; **注意:不是实际代码**

但没有这样的事情。如果绝对需要,我会用0000填充时间。