【Node.js】現在時刻を文字列として取得する

日時を操作するためのライブラリである「date-fns」と「date-fns-tz」を用いることで、
タイムゾーンに対応した現在時刻を任意の形式の文字列として取得します。

手順

以下のコマンドを実行して、必要なパッケージをインストールする。

npm install date-fns date-fns-tz

ファイルを作成し、以下のように編集する。

import * as dateFns from 'date-fns';
import { utcToZonedTime } from 'date-fns-tz';

const getNowDate = (fmt = 'yyyyMMddHHmmss', tz = 'Asia/Tokyo'): string => {
    const utcDate = new Date();
    const tzDate = utcToZonedTime(utcDate, tz);
    return dateFns.format(tzDate, fmt);
};

const nowDate = getNowDate();
console.log('nowDate:', nowDate);

実行すると、コンソールに以下のような内容が出力される。

nowDate: 20230101000000

おまけ

Jestでのテストコードは以下のようになります。

import timezoneMock from 'timezone-mock';
import { getNowDate } from '../service/dateService';

describe('getNowDate: 現在時刻を文字列として取得する', () => {
    beforeEach(() => {
        jest.useFakeTimers();
    });

    afterEach(() => {
        jest.useRealTimers();
    });

    test("タイムゾーン:JSTで実行すると、文字列'20230101000000'を返す", () => {
        // 現在時刻を2023年1月1日00:00:00(JST)として、JSTでの現在時刻を取得する
        timezoneMock.register('Etc/GMT-9');
        const mockDate = new Date('2023-01-01T00:00:00');
        jest.setSystemTime(mockDate);
        expect(getNowDate()).toBe('20230101000000');
        timezoneMock.unregister();
    });

    test("タイムゾーン:UTCで実行すると、文字列'20230101090000'を返す", () => {
        // 現在時刻を2023年1月1日00:00:00(UTC)として、JSTでの現在時刻を取得する
        timezoneMock.register('UTC');
        const mockDate = new Date('2023-01-01T00:00:00');
        jest.setSystemTime(mockDate);
        expect(getNowDate()).toBe('20230101090000');
        timezoneMock.unregister();
    });

    test("フォーマット文字列として'yyyyMMdd'を渡すと、'20230101'を返す", () => {
        timezoneMock.register('Etc/GMT-9');
        const mockDate = new Date('2023-01-01T00:00:00');
        jest.setSystemTime(mockDate);
        expect(getNowDate('yyyyMMdd')).toBe('20230101');
        timezoneMock.unregister();
    });

    test("タイムゾーンとして'UTC'を渡すと、'20221231150000'を返す", () => {
        timezoneMock.register('Etc/GMT-9');
        const mockDate = new Date('2023-01-01T00:00:00');
        jest.setSystemTime(mockDate);
        expect(getNowDate('yyyyMMddHHmmss', 'UTC')).toBe('20221231150000');
        timezoneMock.unregister();
    });
});

参考

タイトルとURLをコピーしました