Add fromRfc3339WithNanoseconds

This commit is contained in:
Simon Warta
2021-02-11 23:54:20 +01:00
parent 85f4bae3c4
commit 96685b3597
3 changed files with 28 additions and 7 deletions
+11 -1
View File
@@ -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);
+16 -5
View File
@@ -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 -1
View File
@@ -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,