コンテンツにスキップ

Duration

Duration は期間を表現するクラスです。

インポート

import { Duration } from "@tai-kun/surrealdb/decodeonly-datatypes";
import { Duration } from "@tai-kun/surrealdb/encodable-datatypes";
import { Duration } from "@tai-kun/surrealdb/standard-datatypes";

.constructor()

新しい Duration オブジェクトを作成します。

new Duration(
source:
| [seconds?: number | bigint, nanoseconds?: undefined]
| [seconds: number | bigint, nanoseconds?: number | undefined],
); // decode-only, encodable
new Duration(
source:
| [seconds?: number | bigint, nanoseconds?: undefined]
| [seconds: number | bigint, nanoseconds?: number | undefined]
| number
| bigint
| string
| Duration,
); // standard

引数

source

秒数とナノ秒数のペアです。プリセットが standard ならより多くの値を Duration オブジェクトにすることができます。

number 型の入力はミリ秒単位で計算されます。これは Date オブジェクト同士の差分を Duration オブジェクトにする用途を想定しています:

const begin = new Date("2024-06-01T12:00:00.000Z");
const end = new Date("2024-06-01T21:00:00.000Z");
new Duration(end - begin);

bigint 型の入力はナノ秒単位で計算されます。これは例えば process.hrtime.bigint() で返されるナノ秒のような、高精度な時間を Duration オブジェクトにする用途を想定しています:

const begin = process.hrtime.bigint();
await run();
const end = process.hrtime.bigint();
new Duration(end - begin);

string 型の入力は期間の文字列表現である必要があります。期間の文字列表現は数字と単位を一組として、それが連続に並ぶフォーマットを指します。例えば 1h4h30m20s1350ms は「1 日と 4 時間 30 分、21 秒 350 ミリ秒」です。利用可能な単位は次のとおりです:

単位説明変換
nsナノ秒
usマイクロ秒1us -> 1000ns
msミリ秒1ms -> 1000us
s1s -> 1000ms
m1m -> 60s
h1h -> 60m
d1d -> 24h
w1w -> 7d
y1y -> 365d

us (0x75, 0x73) は µs (0xc2, 0xb5, 0x73) または μs (0xce, 0xbc, 0x73) とすることもできます (括弧内の 16 進数は単位文字列を UTF-8 でエンコードした結果です)。

返値

new を通じて呼び出された場合、Duration はそのインスタンスを返します。

.seconds インスタンス プロパティー >=decode-only

期間の秒数部です。standard 未満のプリセットでは読み取り専用です。値は 0 から 264-1 までの整数です。

.seconds: bigint;

.nanoseconds インスタンス プロパティー >=decode-only

期間のナノ秒数部です。standard 未満のプリセットでは読み取り専用です。値は 0 から 999999999 までの整数です。

.nanoseconds: number;

.parse() インスタンス プロパティー >=encodable

期間を各単位にマッピングします。各単位の値は、0 以上、その単位の最大値未満になります。なお、期間が 0 の場合は 0 ナノ秒、つまり nanoseconds プロパティーのみが 0 を持ったオブジェクトが返されます。

.parse(): {
years?: number;
weeks?: number;
days?: number;
hours?: number;
minutes?: number;
seconds?: number;
milliseconds?: number;
microseconds?: number;
nanoseconds?: number;
};

引数

なし。

返値

期間を各単位にマッピングした結果を返します。単位の値が 0 の場合はプロパティが省略されますが、期間が 0 の場合は nanoseconds のみが 0 を持ったオブジェクトを返します。

import { Duration } from "@tai-kun/surrealdb/encodable-datatypes";
const duration = new Duration(0);
console.log(duration.parse());
//-> { nanoseconds: 0 }
import { Duration } from "@tai-kun/surrealdb/encodable-datatypes";
const duration = new Duration(12_345_000n);
console.log(duration.parse());
//-> { milliseconds: 12, microseconds: 345 }

.valueOf() インスタンス メソッド >=encodable

期間をナノ秒単位で取得します。

.valueOf(): bigint;

引数

なし。

返値

期間をナノ秒単位で返します。

import { Duration } from "@tai-kun/surrealdb/encodable-datatypes";
const duration = new Duration(12_345_000n);
console.log(duration.valueOf());
//-> 12345000n

.toString() インスタンス メソッド >=encodable

期間の文字列表現を取得します。

.toJSON().toSurql() はこのメソッドと同じ結果を返します。

.toString(): string;

引数

なし。

返値

ミリ秒精度の時刻の文字列表現を取得します。

import { Duration } from "@tai-kun/surrealdb/encodable-datatypes";
const duration = new Duration(12_345_000n);
console.log(duration.toString());
//-> 12ms345µs

.toISOString() インスタンス メソッド >=encodable

期間の文字列を ISO 形式で取得します。

.toISOString(): string;

引数

なし。

返値

期間の文字列を ISO 形式で返します。

import { Duration } from "@tai-kun/surrealdb/encodable-datatypes";
const duration = new Duration("2m3s456ms");
console.log(duration.toISOString());
//-> P2M3S

.getCompact() インスタンス メソッド =standard

秒数とナノ秒数のペアを取得します。

.getCompact(): [seconds: bigint, nanoseconds: number];

引数

なし。

返値

秒数とナノ秒数のペアを返します。

.setCompact() インスタンス メソッド =standard

秒数とナノ秒数のペアで日時を設定します。

.setCompact(compact: [seconds: bigint, nanoseconds: number]): void;

引数

compact

秒数とナノ秒数のペアです。

返値

なし。

.getYears() インスタンス メソッド =standard

年を取得します。0 以上の整数にならない場合は 0 が返されます。

.getYears(): number;

引数

なし。

返値

年を表す 0 以上の整数を返します。

.addYears() インスタンス メソッド =standard

期間から年を指定の数だけ加算します。

.addYears(value: number): void;

引数

value

年数です。

返値

なし。

.subYears() インスタンス メソッド =standard

期間から年を指定の数だけ減算します。

.subYears(value: number): void;

引数

value

年数です。

返値

なし。

.asYears() インスタンス メソッド =standard

年数のミリ秒表現を取得します。

.asYears(): number;

引数

なし。

返値

年数のミリ秒表現です。

.getWeeks() インスタンス メソッド =standard

週を取得します。0 以上の整数にならない場合は 0 が返されます。

.getWeeks(): number;

引数

なし。

返値

週を表す 0 以上の整数を返します。

.addWeeks() インスタンス メソッド =standard

期間から週を指定の数だけ加算します。

.addWeeks(value: number): void;

引数

value

週数です。

返値

なし。

.subWeeks() インスタンス メソッド =standard

期間から週を指定の数だけ減算します。

.subWeeks(value: number): void;

引数

value

週数です。

返値

なし。

.asWeeks() インスタンス メソッド =standard

週数のミリ秒表現を取得します。

.asWeeks(): number;

引数

なし。

返値

週数のミリ秒表現です。

.getDays() インスタンス メソッド =standard

日を取得します。0 以上の整数にならない場合は 0 が返されます。

.getDays(): number;

引数

なし。

返値

日を表す 0 以上の整数を返します。

.addDays() インスタンス メソッド =standard

期間から日を指定の数だけ加算します。

.addDays(value: number): void;

引数

value

日数です。

返値

なし。

.subDays() インスタンス メソッド =standard

期間から日を指定の数だけ減算します。

.subDays(value: number): void;

引数

value

日数です。

返値

なし。

.asDays() インスタンス メソッド =standard

日数のミリ秒表現を取得します。

.asDays(): number;

引数

なし。

返値

日数のミリ秒表現です。

.getHours() インスタンス メソッド =standard

時を取得します。0 以上の整数にならない場合は 0 が返されます。

.getHours(): number;

引数

なし。

返値

時を表す 0 以上の整数を返します。

.addHours() インスタンス メソッド =standard

期間から時を指定の数だけ加算します。

.addHours(value: number): void;

引数

value

時数です。

返値

なし。

.subHours() インスタンス メソッド =standard

期間から時を指定の数だけ減算します。

.subHours(value: number): void;

引数

value

時数です。

返値

なし。

.asHours() インスタンス メソッド =standard

時数のミリ秒表現を取得します。

.asHours(): number;

引数

なし。

返値

時数のミリ秒表現です。

.getMinutes() インスタンス メソッド =standard

分を取得します。0 以上の整数にならない場合は 0 が返されます。

.getMinutes(): number;

引数

なし。

返値

分を表す 0 以上の整数を返します。

.addMinutes() インスタンス メソッド =standard

期間から分を指定の数だけ加算します。

.addMinutes(value: number): void;

引数

value

分数です。

返値

なし。

.subMinutes() インスタンス メソッド =standard

期間から分を指定の数だけ減算します。

.subMinutes(value: number): void;

引数

value

分数です。

返値

なし。

.asMinutes() インスタンス メソッド =standard

分数のミリ秒表現を取得します。

.asMinutes(): number;

引数

なし。

返値

分数のミリ秒表現です。

.getSeconds() インスタンス メソッド =standard

秒を取得します。0 以上の整数にならない場合は 0 が返されます。

.getSeconds(): number;

引数

なし。

返値

秒を表す 0 以上の整数を返します。

.addSeconds() インスタンス メソッド =standard

期間から秒を指定の数だけ加算します。

.addSeconds(value: number): void;

引数

value

秒数です。

返値

なし。

.subSeconds() インスタンス メソッド =standard

期間から秒を指定の数だけ減算します。

.subSeconds(value: number): void;

引数

value

秒数です。

返値

なし。

.asSeconds() インスタンス メソッド =standard

秒数のミリ秒表現を取得します。

.asSeconds(): number;

引数

なし。

返値

秒数のミリ秒表現です。

.getMilliseconds() インスタンス メソッド =standard

ミリ秒を取得します。0 以上の整数にならない場合は 0 が返されます。

.getMilliseconds(): number;

引数

なし。

返値

ミリ秒を表す 0 以上の整数を返します。

.addMilliseconds() インスタンス メソッド =standard

期間からミリ秒を指定の数だけ加算します。

.addMilliseconds(value: number): void;

引数

value

ミリ秒数です。

返値

なし。

.subMilliseconds() インスタンス メソッド =standard

期間からミリ秒を指定の数だけ減算します。

.subMilliseconds(value: number): void;

引数

value

ミリ秒数です。

返値

なし。

.asMilliseconds() インスタンス メソッド =standard

ミリ秒数のミリ秒表現を取得します。

.asMilliseconds(): number;

引数

なし。

返値

ミリ秒数のミリ秒表現です。

.getMicroseconds() インスタンス メソッド =standard

マイクロ秒を取得します。0 以上の整数にならない場合は 0 が返されます。

.getMicroseconds(): number;

引数

なし。

返値

マイクロ秒を表す 0 以上の整数を返します。

.addMicroseconds() インスタンス メソッド =standard

期間からマイクロ秒を指定の数だけ加算します。

.addMicroseconds(value: number): void;

引数

value

マイクロ秒数です。

返値

なし。

.subMicroseconds() インスタンス メソッド =standard

期間からマイクロ秒を指定の数だけ減算します。

.subMicroseconds(value: number): void;

引数

value

マイクロ秒数です。

返値

なし。

.asMicroseconds() インスタンス メソッド =standard

マイクロ秒数のミリ秒表現を取得します。

.asMicroseconds(): number;

引数

なし。

返値

マイクロ秒数のミリ秒表現です。

.getNanoseconds() インスタンス メソッド =standard

ナノ秒を取得します。0 以上の整数にならない場合は 0 が返されます。

.getNanoseconds(): number;

引数

なし。

返値

ナノ秒を表す 0 以上の整数を返します。

.addNanoseconds() インスタンス メソッド =standard

期間からナノ秒を指定の数だけ加算します。

.addNanoseconds(value: number): void;

引数

value

ナノ秒数です。

返値

なし。

.subNanoseconds() インスタンス メソッド =standard

期間からナノ秒を指定の数だけ減算します。

.subNanoseconds(value: number): void;

引数

value

ナノ秒数です。

返値

なし。

.asNanoseconds() インスタンス メソッド =standard

ナノ秒数のミリ秒表現を取得します。

.asNanoseconds(): number;

引数

なし。

返値

ナノ秒数のミリ秒表現です。