zukucode
主にWEB関連の情報を技術メモとして発信しています。

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"

関連記事