Add toSeconds
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -6,6 +6,7 @@ export {
|
||||
ReadonlyDateWithNanoseconds,
|
||||
fromRfc3339WithNanoseconds,
|
||||
toRfc3339WithNanoseconds,
|
||||
toSeconds,
|
||||
} from "./dates";
|
||||
export {
|
||||
AbciInfoRequest,
|
||||
|
||||
Reference in New Issue
Block a user