So, I know I can get current time in milliseconds using JavaScript. But, is it possible to get the current time in nanoseconds instead?
In Server side environments like Node.js you can use the following function to get time in nanosecond
function getNanoSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000000 + hrTime[1];
}
Also get micro seconds in a similar way as well:
function getMicSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000 + parseInt(hrTime[1] / 1000);
}
JavaScript records time in milliseconds, so you won't be able to get time to that precision. The smart-aleck answer is to "multiply by 1,000,000".
performance.timing.navigationStart
has been deprecated! Use the following instead:
(performance.now() + performance.timeOrigin)
This specification defines an API that provides the time origin, and current time in sub-millisecond resolution, such that it is not subject to system clock skew or adjustments.
The
timeOrigin
attribute MUST return aDOMHighResTimeStamp
representing the high resolution time of the time origin timestamp for the relevant global object of thePerformance
object.The time origin timestamp is the high resolution time value at which time origin is zero.
The time origin is the time value from which time is measured
The
now()
method MUST return the current high resolution time.The current high resolution time is the high resolution time from the time origin to the present time (typically called “now”).
This specification defines an API that provides sub-millisecond time resolution, which is more accurate than the previously available millisecond resolution exposed by
DOMTimeStamp
. However, even without this new API an attacker may be able to obtain high-resolution estimates through repeat execution and statistical analysis. To ensure that the new API does not significantly improve the accuracy or speed of such attacks, the minimum resolution of theDOMHighResTimeStamp
type should be inaccurate enough to prevent attacks: the current minimum recommended resolution is no less than 5 microseconds and, where necessary, should be set higher by the User Agent to address privacy and security concerns due to architecture or software constraints, or other considerations.
Achieve microsecond accuracy in most browsers using:
window.performance.now()
See also:
Building on Jeffery's answer, to get an absolute time-stamp (as the OP wanted) the code would be:
var TS = window.performance.timing.navigationStart + window.performance.now();
result is in millisecond units but is a floating-point value reportedly "accurate to one thousandth of a millisecond".
Yes! Try the excellent sazze's nano-time
let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)