Add fromRfc3339WithNanoseconds
This commit is contained in:
@@ -1,8 +1,18 @@
|
||||
import { ReadonlyDate } from "readonly-date";
|
||||
|
||||
import { DateTime } from "./dates";
|
||||
import { DateTime, fromRfc3339WithNanoseconds } from "./dates";
|
||||
|
||||
describe("dates", () => {
|
||||
it("fromRfc3339WithNanoseconds", () => {
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778Z").nanoseconds).toEqual(0);
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.7789Z").nanoseconds).toEqual(900000);
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.77809Z").nanoseconds).toEqual(90000);
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778009Z").nanoseconds).toEqual(9000);
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.7780009Z").nanoseconds).toEqual(900);
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.77800009Z").nanoseconds).toEqual(90);
|
||||
expect(fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778000009Z").nanoseconds).toEqual(9);
|
||||
});
|
||||
|
||||
describe("DateTime", () => {
|
||||
it("decodes a string", () => {
|
||||
expect(DateTime.decode("2020-12-15T10:57:26.778Z").nanoseconds).toEqual(0);
|
||||
|
||||
@@ -6,13 +6,24 @@ export interface ReadonlyDateWithNanoseconds extends ReadonlyDate {
|
||||
readonly nanoseconds?: number;
|
||||
}
|
||||
|
||||
export interface DateWithNanoseconds extends Date {
|
||||
/** Nanoseconds after the time stored in a vanilla Date (millisecond granularity) */
|
||||
nanoseconds?: number;
|
||||
}
|
||||
|
||||
export function fromRfc3339WithNanoseconds(dateTimeString: string): DateWithNanoseconds {
|
||||
// fromRfc3339 should give the caller a regular Date directly
|
||||
const out: DateWithNanoseconds = new Date(fromRfc3339(dateTimeString).getTime());
|
||||
const nanosecondsMatch = dateTimeString.match(/\.(\d+)Z$/);
|
||||
const nanoseconds = nanosecondsMatch ? nanosecondsMatch[1].slice(3) : "";
|
||||
out.nanoseconds = parseInt(nanoseconds.padEnd(6, "0"), 10);
|
||||
return out;
|
||||
}
|
||||
|
||||
export class DateTime {
|
||||
/** @deprecated Use fromRfc3339WithNanoseconds instead */
|
||||
public static decode(dateTimeString: string): ReadonlyDateWithNanoseconds {
|
||||
const readonlyDate = fromRfc3339(dateTimeString);
|
||||
const nanosecondsMatch = dateTimeString.match(/\.(\d+)Z$/);
|
||||
const nanoseconds = nanosecondsMatch ? nanosecondsMatch[1].slice(3) : "";
|
||||
(readonlyDate as any).nanoseconds = parseInt(nanoseconds.padEnd(6, "0"), 10);
|
||||
return readonlyDate as ReadonlyDateWithNanoseconds;
|
||||
return fromRfc3339WithNanoseconds(dateTimeString);
|
||||
}
|
||||
|
||||
public static encode(dateTime: ReadonlyDateWithNanoseconds): string {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export { Adaptor } from "./adaptor";
|
||||
export { adaptor33, adaptor34 } from "./adaptors";
|
||||
export { Client } from "./client";
|
||||
export { DateTime, ReadonlyDateWithNanoseconds } from "./dates";
|
||||
export { DateTime, ReadonlyDateWithNanoseconds, fromRfc3339WithNanoseconds } from "./dates";
|
||||
export {
|
||||
AbciInfoRequest,
|
||||
AbciQueryParams,
|
||||
|
||||
Reference in New Issue
Block a user