Add toSeconds

This commit is contained in:
Simon Warta
2021-02-15 17:16:10 +01:00
parent 5eafe6a7bb
commit d610f5cba1
3 changed files with 66 additions and 1 deletions
+52 -1
View File
@@ -1,6 +1,12 @@
import { ReadonlyDate } from "readonly-date";
import { DateTime, DateWithNanoseconds, fromRfc3339WithNanoseconds, toRfc3339WithNanoseconds } from "./dates";
import {
DateTime,
DateWithNanoseconds,
fromRfc3339WithNanoseconds,
toRfc3339WithNanoseconds,
toSeconds,
} from "./dates";
describe("dates", () => {
describe("fromRfc3339WithNanoseconds", () => {
@@ -55,6 +61,51 @@ describe("dates", () => {
});
});
describe("toSeconds", () => {
it("works", () => {
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26Z");
expect(toSeconds(date)).toEqual([1608029846, 0]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.7Z");
expect(toSeconds(date)).toEqual([1608029846, 700000000]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.77Z");
expect(toSeconds(date)).toEqual([1608029846, 770000000]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778Z");
expect(toSeconds(date)).toEqual([1608029846, 778000000]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.7789Z");
expect(toSeconds(date)).toEqual([1608029846, 778900000]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.77809Z");
expect(toSeconds(date)).toEqual([1608029846, 778090000]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778009Z");
expect(toSeconds(date)).toEqual([1608029846, 778009000]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.7780009Z");
expect(toSeconds(date)).toEqual([1608029846, 778000900]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.77800009Z");
expect(toSeconds(date)).toEqual([1608029846, 778000090]);
}
{
const date = fromRfc3339WithNanoseconds("2020-12-15T10:57:26.778000009Z");
expect(toSeconds(date)).toEqual([1608029846, 778000009]);
}
});
});
describe("DateTime", () => {
it("decodes a string", () => {
expect(DateTime.decode("2020-12-15T10:57:26.778Z").nanoseconds).toEqual(0);
+13
View File
@@ -25,6 +25,19 @@ export function toRfc3339WithNanoseconds(dateTime: ReadonlyDateWithNanoseconds):
return `${millisecondIso.slice(0, -1)}${nanoseconds.padStart(6, "0")}Z`;
}
/**
* Caclulates the UNIX timestamp in seconds as well as the nanoseconds after the given second.
*
* This is useful when dealing with external systems like the protobuf type
* [.google.protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Timestamp)
* or any other system that does not use millisecond precision.
*/
export function toSeconds(date: ReadonlyDateWithNanoseconds): [number, number] {
const seconds = Math.floor(date.getTime() / 1000);
const nanos = (date.getTime() % 1000) * 1000000 + (date.nanoseconds ?? 0);
return [seconds, nanos];
}
/** @deprecated Use fromRfc3339WithNanoseconds/toRfc3339WithNanoseconds instead */
export class DateTime {
/** @deprecated Use fromRfc3339WithNanoseconds instead */
+1
View File
@@ -6,6 +6,7 @@ export {
ReadonlyDateWithNanoseconds,
fromRfc3339WithNanoseconds,
toRfc3339WithNanoseconds,
toSeconds,
} from "./dates";
export {
AbciInfoRequest,