/*! * Copyright 2019 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ export type DateTuple = [number, number]; export interface DateStruct { seconds: number; nanos: number; } interface Long { toNumber(): number; } interface ProtobufDate { seconds?: number | string | Long; nanos?: number | string; } /** * The native Date object. * @external Date * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date} */ /** * @typedef {array} DateTuple * @property {number} 0 Represents seconds of UTC time since Unix epoch * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to * 9999-12-31T23:59:59Z inclusive. * @property {number} 1 Non-negative fractions of a second at nanosecond * resolution. Negative second values with fractions must still have * non-negative nanos values that count forward in time. Must be from 0 to * 999,999,999 inclusive. */ /** * @typedef {object} DateStruct * @property {number} seconds Represents seconds of UTC time since Unix epoch * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to * 9999-12-31T23:59:59Z inclusive. * @property {number} nanos Non-negative fractions of a second at nanosecond * resolution. Negative second values with fractions must still have * non-negative nanos values that count forward in time. Must be from 0 to * 999,999,999 inclusive. */ /** * Date object with nanosecond precision. Supports all standard Date arguments * in addition to several custom types as noted below. * * @class * @extends external:Date * * @param {number|string|bigint|Date|DateTuple|DateStruct} [time] The time * value. * @param {...number} [dateFields] Additional date fields (month, date, hours, * minutes, seconds, milliseconds, microseconds, nanoseconds). * * @example With a RFC 3339 formatted string. * const date = new PreciseDate('2019-02-08T10:34:29.481145231Z'); * * @example With a nanosecond timestamp string. * const date = new PreciseDate('1549622069481320032'); * * @example With a BigInt (requires Node >= v10.7) * const date = new PreciseDate(1549622069481320032n); * * @example With a tuple containing seconds and nanoseconds. * const date = new PreciseDate([1549622069, 481320032]); * * @example With an object containing `seconds` and `nanos` * const date = new PreciseDate({seconds: 1549622069, nanos: 481320032}); * * @example Specifiying date fields * const date = new PreciseDate(2018, 5, 14, 41, 11, 34, 123, 874, 321); */ export declare class PreciseDate extends Date { private _micros; private _nanos; constructor(time?: number | Date); constructor(preciseTime: string | bigint | DateTuple | ProtobufDate); constructor(year: number, month?: number, date?: number, hours?: number, minutes?: number, seconds?: number, milliseconds?: number, microseconds?: number, nanoseconds?: number); /** * Returns the specified date represented in nanoseconds according to * universal time. * * **NOTE:** Because this method returns a `BigInt` it requires Node >= v10.7. * Use {@link PreciseDate#getFullTimeString} to get the time as a string. * * @see {@link https://github.com/tc39/proposal-bigint|BigInt} * * @throws {error} If `BigInt` is unavailable. * @returns {bigint} * * @example * const date = new PreciseDate('2019-02-08T10:34:29.481145231Z'); * * console.log(date.getFullTime()); * // expected output: 1549622069481145231n */ getFullTime(): bigint; /** * Returns a string of the specified date represented in nanoseconds according * to universal time. * * @returns {string} * * @example * const date = new PreciseDate('2019-02-08T10:34:29.481145231Z'); * * console.log(date.getFullTimeString()); * // expected output: "1549622069481145231" */ getFullTimeString(): string; /** * Returns the microseconds in the specified date according to universal time. * * @returns {number} * * @example * const date = new PreciseDate('2019-02-08T10:34:29.481145Z'); * * console.log(date.getMicroseconds()); * // expected output: 145 */ getMicroseconds(): number; /** * Returns the nanoseconds in the specified date according to universal time. * * @returns {number} * * @example * const date = new PreciseDate('2019-02-08T10:34:29.481145231Z'); * * console.log(date.getNanoseconds()); * // expected output: 231 */ getNanoseconds(): number; /** * Sets the microseconds for a specified date according to universal time. * * @param {number} microseconds A number representing the microseconds. * @returns {string} Returns a string representing the nanoseconds in the * specified date according to universal time. * * @example * const date = new PreciseDate(); * * date.setMicroseconds(149); * * console.log(date.getMicroseconds()); * // expected output: 149 */ setMicroseconds(micros: number): string; /** * Sets the nanoseconds for a specified date according to universal time. * * @param {number} nanoseconds A number representing the nanoseconds. * @returns {string} Returns a string representing the nanoseconds in the * specified date according to universal time. * * @example * const date = new PreciseDate(); * * date.setNanoseconds(231); * * console.log(date.getNanoseconds()); * // expected output: 231 */ setNanoseconds(nanos: number): string; /** * Sets the PreciseDate object to the time represented by a number of * nanoseconds since January 1, 1970, 00:00:00 UTC. * * @param {bigint|number|string} time Value representing the number of * nanoseconds since January 1, 1970, 00:00:00 UTC. * @returns {string} Returns a string representing the nanoseconds in the * specified date according to universal time (effectively, the value of * the argument). * * @see {@link https://github.com/tc39/proposal-bigint|BigInt} * * @example With a nanosecond string. * const date = new PreciseDate(); * date.setFullTime('1549622069481145231'); * * @example With a BigInt * date.setFullTime(1549622069481145231n); */ setFullTime(time: string | number | bigint): string; /** * Sets the PreciseDate object to the time represented by a number of * milliseconds since January 1, 1970, 00:00:00 UTC. Calling this method will * reset both the microseconds and nanoseconds to 0. * * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime|Date#setTime} * * @param {number} time Value representing the number of milliseconds since * January 1, 1970, 00:00:00 UTC. * @returns {string} The number of milliseconds between January 1, 1970, * 00:00:00 UTC and the updated date (effectively, the value of the * argument). */ setTime(time: number): number; /** * Returns a string in RFC 3339 format. Unlike the native `Date#toISOString`, * this will return 9 digits to represent sub-second precision. * * @see {@link https://tools.ietf.org/html/rfc3339|RFC 3339} * * @returns {string} * * @example * const date = new PreciseDate(1549622069481145231n); * * console.log(date.toISOString()); * // expected output: "2019-02-08T10:34:29.481145231Z" */ toISOString(): string; /** * Returns an object representing the specified date according to universal * time. * * @see {@link https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#timestamp|google.protobuf.Timestamp} * * @returns {DateStruct} * * @example * const date = new PreciseDate('2019-02-08T10:34:29.481145231Z'); * * console.log(date.toStruct()); * // expected output: {seconds: 1549622069, nanos: 481145231} */ toStruct(): DateStruct; /** * Returns a tuple representing the specified date according to universal * time. * * @returns {DateTuple} * * @example * const date = new PreciseDate('2019-02-08T10:34:29.481145231Z'); * * console.log(date.toTuple()); * // expected output: [1549622069, 481145231] */ toTuple(): DateTuple; /** * Returns the total number of seconds in the specified date since Unix epoch. * Numbers representing < epoch will be negative. * * @private * * @returns {number} */ private _getSeconds; /** * Returns the sub-second precision of the specified date. This will always be * a positive number. * * @private * * @returns {number} */ private _getNanos; /** * Parses a precise time. * * @static * * @param {string|bigint|DateTuple|DateStruct} time The precise time value. * @returns {string} Returns a string representing the nanoseconds in the * specified date according to universal time. * * @example From a RFC 3339 formatted string. * const time = PreciseDate.parseFull('2019-02-08T10:34:29.481145231Z'); * console.log(time); // expected output: "1549622069481145231" * * @example From a nanosecond timestamp string. * const time = PreciseDate.parseFull('1549622069481145231'); * console.log(time); // expected output: "1549622069481145231" * * @example From a BigInt (requires Node >= v10.7) * const time = PreciseDate.parseFull(1549622069481145231n); * console.log(time); // expected output: "1549622069481145231" * * @example From a tuple. * const time = PreciseDate.parseFull([1549622069, 481145231]); * console.log(time); // expected output: "1549622069481145231" * * @example From an object. * const struct = {seconds: 1549622069, nanos: 481145231}; * const time = PreciseDate.parseFull(struct); * console.log(time); // expected output: "1549622069481145231" */ static parseFull(time: string | bigint | DateTuple | ProtobufDate): string; /** * Accepts the same number parameters as the PreciseDate constructor, but * treats them as UTC. It returns a string that represents the number of * nanoseconds since January 1, 1970, 00:00:00 UTC. * * **NOTE:** Because this method returns a `BigInt` it requires Node >= v10.7. * * @see {@link https://github.com/tc39/proposal-bigint|BigInt} * * @static * * @throws {error} If `BigInt` is unavailable. * * @param {...number} [dateFields] The date fields. * @returns {bigint} * * @example * const time = PreciseDate.fullUTC(2019, 1, 8, 10, 34, 29, 481, 145, 231); * console.log(time); // expected output: 1549622069481145231n */ static fullUTC(...args: number[]): bigint; /** * Accepts the same number parameters as the PreciseDate constructor, but * treats them as UTC. It returns a string that represents the number of * nanoseconds since January 1, 1970, 00:00:00 UTC. * * @static * * @param {...number} [dateFields] The date fields. * @returns {string} * * @example * const time = PreciseDate.fullUTCString(2019, 1, 8, 10, 34, 29, 481, 145, * 231); console.log(time); // expected output: '1549622069481145231' */ static fullUTCString(...args: number[]): string; } export {};