JavaScript 日付を指定した書式の文字列にフォーマットする
JavaScript
の日付オブジェクトを指定した書式でフォーマットする汎用ファンクションを作成します。
日付オブジェクトを文字列に変換していくのではなく、指定したフォーマットの文字列に日付オブジェクトの対象の値を置換していくイメージです。
このやり方なら例えば曜日が必要な場合でも簡単に拡張できます。
// date: 日付オブジェクト
// format: 書式フォーマット
function formatDate (date, format) {
format = format.replace(/yyyy/g, date.getFullYear());
format = format.replace(/MM/g, ('0' + (date.getMonth() + 1)).slice(-2));
format = format.replace(/dd/g, ('0' + date.getDate()).slice(-2));
format = format.replace(/HH/g, ('0' + date.getHours()).slice(-2));
format = format.replace(/mm/g, ('0' + date.getMinutes()).slice(-2));
format = format.replace(/ss/g, ('0' + date.getSeconds()).slice(-2));
format = format.replace(/SSS/g, ('00' + date.getMilliseconds()).slice(-3));
return format;
};
// 2017年1月2日3時4分5秒6ミリ秒
var date = new Date(2017, 0, 2, 3, 4, 5, 6);
console.log(formatDate(date, 'yyyyMMdd')); // "20170102"
console.log(formatDate(date, 'yyyyMMddHHmmssSSS')); // "20170102030405006"
console.log(formatDate(date, 'yyyy/MM/dd')); // "2017/01/02"
console.log(formatDate(date, 'yyyy-MM-dd')); // "2017-01-02"
console.log(formatDate(date, 'HH:mm')); // "03:04"
console.log(formatDate(date, 'HH:mm:ss:SSS')); // "03:04:05:006"
2017/1/2
などのように、0埋めが不要な場合は以下ようにします。
function formatDate (date, format) {
format = format.replace(/yyyy/g, date.getFullYear());
format = format.replace(/M/g, (date.getMonth() + 1));
format = format.replace(/d/g, (date.getDate()));
format = format.replace(/H/g, (date.getHours()));
format = format.replace(/m/g, (date.getMinutes()));
format = format.replace(/s/g, (date.getSeconds()));
format = format.replace(/S/g, (date.getMilliseconds()));
return format;
};
// 2017年1月2日3時4分5秒6ミリ秒
var date = new Date(2017, 0, 2, 3, 4, 5, 6);
console.log(formatDate(date, 'yyyy/M/d')); // "2017/1/2"
console.log(formatDate(date, 'yyyy-M-d')); // "2017-1-2"
console.log(formatDate(date, 'H:m')); // "3:4"
console.log(formatDate(date, 'H:m:s:S')); // "3:4:5:6"