日時を操作するためのライブラリである「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();
});
});
参考
- JavaScript: date-fnsでタイムゾーンを扱う – Qiita
https://qiita.com/suin/items/296740d22624b530f93a - date-fns/date-fns: ⏳ Modern JavaScript date utility library ⌛️
https://github.com/date-fns/date-fns - marnusw/date-fns-tz: Complementary library for date-fns v2 adding IANA time zone support
https://github.com/marnusw/date-fns-tz