日付操作系の大がかりなライブラリ等を導入するまでもないようなケースで扱いやすいよう、必要最低限の機能をコピペで簡単に利用できそうなサイズを意識して組んでみました。
const dateFormat = (format, date = Date.now()) => {
const d = new Date(date);
d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
const r = {};
d.toJSON().match(/\d+/g).forEach((v, i) => r[['YYYY', 'MM', 'DD', 'hh', 'mm', 'ss', 'ms'][i]] = v);
[...'MDhms'].forEach(k => r[k] = +r[k + k]);
r.YY = r.YYYY.slice(-2);
r.hh12 = `0${r.h12 = (+r.h + 11) % 12 + 1}`.slice(-2);
r.ap = (r.AP = r.h < 12 ? 'AM' : 'PM').toLowerCase();
r.apj = r.h < 12 ? '午前' : '午後';
r.w = d.getUTCDay();
r.wj = '日月火水木金土'[r.w];
r.wes = (r.we = `${['Sun', 'Mon', 'Tues', 'Wednes', 'Thurs', 'Fri', 'Satur'][r.w]}day`).slice(0, 3);
r.mes = (r.me = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][r.M - 1]).slice(0, 3);
return format.replace(/%(\w+)%/g, (a, b) => r[b] ?? a);
};
書式
dateFormat(フォーマット文字列 [,dateオブジェクト])
引数
- フォーマット文字列
以下のフォーマット文字が使用できます。
%YYYY% 年 西暦4桁
%YY% 年 西暦下2桁
0パディングあり
%MM% 月: 01~12
%DD% 日: 01~31
%hh% 時: 00~23
%hh12% 時: 01~12
%mm% 分: 00~59
%ss% 秒: 00~59
0パディングなし
%M% 月: 1~12
%D% 日: 1~31
%h% 時: 0~23
%h12% 時: 1~12
%m% 分: 0~59
%s% 秒: 0~59
%ms% ミリ秒: 000~999
%AP% AM/PM
%ap% am/pm
%apj% 午前/午後
%w% 曜日: 0(日)~6(土)
%wj% 曜日 日本語: 日~土
%we% 曜日 英語: Sunday~Saturday
%wes% 曜日 英語3文字: Sun~Sat
%me% 月 英語: January~December
%mes% 月 英語3文字: Jan~Dec
- dateオブジェクト
Dateオブジェクト、またはDate()コンストラクターが解釈できる日時文字列やUNIXエポックからのミリ秒が渡せます。
省略した場合は実行時の日時になります。
example
console.log( dateFormat('本日は%M%月%D%日 %wj%曜日です') ); // 本日は9月5日 月曜日です
console.log( dateFormat('%YYYY%-%MM%-%DD% %hh%:%mm%:%ss%') ); // 2022-09-05 14:04:50
console.log( dateFormat('%YYYY%年%M%月%D%日 %apj%%h12%時%m%分', '2000-01-02 15:04:00') ); // 2000年1月2日 午後3時4分
日付フォーマッタ系の過去の投稿記事
JavaScript Dateオブジェクトに書式指定メソッドを追加
PHPのdate()やmktime()をjavascriptでも使いたい