我需要这样的日期格式: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之类的库。
感谢。
答案 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上不起作用,但它应该适用于其他现代浏览器:
答案 1 :(得分:0)
不幸的是,没有这样的功能来检索当前的纳秒。理想情况下,你会写一个额外的一行:
+ currentDate.getNanoseconds() * 10;
**注意:不是实际代码**
但没有这样的事情。如果绝对需要,我会用0000
填充时间。