• ..

NextJS

    日本時間を取得

    JavaScript では時間はnew Date()などで取得できますが、そのマシンのタイムゾーン設定などからうまく日本時間を取得できない場合があります。

    JST が選択可能なマシンの場合

    Date#toLocaleStringを使えば大丈夫です。日本時間を取得するにはこれに日本のタイムゾーンであるAsia/Tokyoを渡して実行します。

    new Date().toLocaleString({ timeZone: 'Asia/Tokyo' })
    // "3/19/2019, 3:29:58 PM"

    これで日本時間の文字列が取得できます。何か触りたい場合は再度これをnew Date()に渡して使います。

    const japanStandardTime = new Date().toLocaleString({ timeZone: 'Asia/Tokyo' });
    new Date(japanStandardTime).getHours();
    // 15
    new Date(new Date().toLocaleString({ timeZone: 'Asia/Tokyo' })).getTime();
    // 1552978393000

    JST が選択できないマシンの場合

    この場合上のように、timeZone: 'Asia/Tokyo'と設定しても UTC になってしまうようです( AWS Lambda 上など)。その場合は、Date#getTimeZoneOffsetを使います。
    これは、協定世界時からどれだけ差があるかをで取得できるメソッドです。例えば日本なら9時間で9 * 60(540)分進んでいますから-540という値が得られます。そして、 UTC なマシンでは0を取得します。

    new Date().getTimeZoneOffset();
    // -540 JST
    // 0 UTC

    この差を利用することで、以下のようにするとどちらでも日本時間を取得できます。つまり、 JST の方を0として扱い、逆に UTC を540分遅れているという風にして、その分のtimeを現在のtimeに追加してあげるということです。

    new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000));
    // どちらで実行しても同じ結果