はじめに
この実験では、タイムゾーンオフセット付きの拡張 ISO 形式(ISO 8601)に日付を変換する方法を学びます。タイムゾーンオフセットを取得して逆転させるために、Date.prototype.getTimezoneOffset() メソッドを使用します。次に、渡された任意の数値を整数に正規化し、String.prototype.padStart() を使用して 2 桁にパディングするためのヘルパー関数を定義します。最後に、Date プロトタイプの組み込みメソッドを使用して、タイムゾーンオフセット付きの ISO 8601 文字列を作成します。この実験が終了するとき、JavaScript で日付を操作する方法をより深く理解しているでしょう。
タイムゾーン付きで日付を ISO 形式に変換する
日付を拡張 ISO 形式(ISO 8601)に変換し、タイムゾーンオフセットを含めるには、次の手順に従います。
- ターミナル/SSH を開き、コーディングを開始するために
nodeを入力します。 Date.prototype.getTimezoneOffset()を使用してタイムゾーンオフセットを取得し、それを逆転させます。その符号をdiffに格納します。- ヘルパー関数
pad()を定義します。これは、Math.floor()とMath.abs()を使用して渡された任意の数値を整数に正規化し、String.prototype.padStart()を使用してそれを 2 桁にパディングします。 pad()とDateプロトタイプの組み込みメソッドを使用して、タイムゾーンオフセット付きの ISO 8601 文字列を作成します。
次のコードを使用できます。
const toISOStringWithTimezone = (date) => {
const tzOffset = -date.getTimezoneOffset();
const diff = tzOffset >= 0 ? "+" : "-";
const pad = (n) => `${Math.floor(Math.abs(n))}`.padStart(2, "0");
return (
date.getFullYear() +
"-" +
pad(date.getMonth() + 1) +
"-" +
pad(date.getDate()) +
"T" +
pad(date.getHours()) +
":" +
pad(date.getMinutes()) +
":" +
pad(date.getSeconds()) +
diff +
pad(tzOffset / 60) +
":" +
pad(tzOffset % 60)
);
};
toISOStringWithTimezone() 関数に new Date() オブジェクトを引数として渡して、タイムゾーンオフセット付きの ISO 形式の日付を取得します。たとえば:
toISOStringWithTimezone(new Date()); // '2020-10-06T20:43:33-04:00'
まとめ
おめでとうございます!あなたは「タイムゾーン付きで日付を ISO 形式に変換する」実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習することができます。