A TaiDate
object represents an instant in International Atomic Time (TAI), in the same way that a conventional JavaScript Date
object represents an instant in Unix time.
To convert TaiDate
s to and from Date
s, use the t-a-i
, which provides methods for converting TAI milliseconds to Unix milliseconds.
npm install tai-date
import { TaiConverter } from 't-a-i'
import { TaiDate } from 'tai-date'
const taiConverter = TaiConverter(tai.MODELS.STALL)
const date = new Date(2016, 9, 30, 14, 45, 49)
// Sun Oct 30 2016 14:45:49 GMT+0000 (GMT Standard Time)
const taiDate = new TaiDate(taiConverter.unixToAtomic(date.getTime()))
// Sun Oct 30 2016 14:46:25 TAI
console.log(taiDate.getTime() - date.getTime())
// 36000; TAI was 36 seconds ahead of Unix at this time
A Date
object specifically represents an instant in Unix time. Its method names and method behaviours reflect this. For example
- the names of the methods
Date.UTC
,Date.prototype.getUTCFullYear
,Date.prototype.getUTCMonth
and so on - the behaviour of e.g.
Date.now()
andDate.prototype.getTime()
, which are documented as returning Unix milliseconds, not TAI milliseconds - locale conversion behaviour of
Date.prototype.getHours
,Date.prototype.getMinutes
and so on - stringification methods such as
Date.prototype.toISOString
which return e.g."2011-10-05T14:48:00.000Z"
- note the trailing "Z" indicating Zulu time i.e. UTC
Throws an exception. TaiDate
has to be told what instant in TAI it represents, it isn't able to convert Unix time to TAI by itself.
atomic
is a number of TAI milliseconds. Constructs a TaiDate
object representing this instant in time.
new TaiDate(1000000000000)
// Sun, 09 Sep 2001 01:46:40 TAI
Throws an exception. TaiDate
has no string-parsing capability.
Construct a TaiDate
object representing the instant described by year
, month
and so on in the TAI calendar. day
defaults to 1
if omitted, everything else defaults to 0
.
new TaiDate(2016, 9, 30, 14, 46, 25)
// Sun Oct 30 2016 14:46:25 TAI
Take the year, month etc. as representing a TAI calendar date and time, and convert it to TAI milliseconds. day
defaults to 1
if omitted, everything else defaults to 0
. Note that this method has exactly identical behaviour to Date.UTC
.
TaiDate.TAI(2012, 11, 12, 23, 59, 59, 999)
// 1355356799999
Convert a TaiDate
object to TAI milliseconds.
new TaiDate(2012, 11, 12, 23, 59, 59, 999).getTime()
// 1355356799999
The above are all getter methods, analogous to the equivalent getters on Date
but always returning TAI figures.
Return a string representing this instant in TAI.
new TaiDate(2006, 6, 3, 21, 44, 38).toString()
// "Mon 03 Jul 2006 21:44:38 TAI"