スニぺったん

無料のコードスニペットを掲載しています。言語ごとにコードスニペットを検索し、利用することが可能です。コードのライセンスはトップページをご覧ください。

  • JavaScript
  • Dateオブジェクトを書式の文字列に変換する関数 (formatDate)

Dateオブジェクトを書式の文字列に変換する関数 (formatDate)

総合評価: - 作成日: 2025-11-12

コメント:
Braveブラウザで動作確認済み。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>formatDate</title>
    <script>
        /**
         * Dateオブジェクトdateを書式fmtの文字列にする。
         *
         * 書式に使える文字は以下の通り。
         *
         *      %Y ... 年
         *      %m ... 月
         *      %d ... 日
         *      %H ... 時
         *      %M ... 分
         *      %S ... 秒
         *      %a ... 曜日(日本語)
         * 
         * fmt ... 書式文字列
         * date ... Dateオブジェクト
         * 返り値 ... 生成された文字列
         */
        function formatDate (fmt, date) {
            const week = ['日', '月', '火', '水', '木', '金', '土'];
            let s = ''

            function pad (n) {
                if (n < 10) {
                    return '0' + n
                } else {
                    return '' + n
                }
            }

            for (let i = 0; i < fmt.length; i++) {
                let c = fmt[i]
                switch (c) {
                default:
                    s += c
                    break
                case '%':
                    i++
                    if (i < fmt.length) {
                        c = fmt[i]
                        switch (c) {
                        default: s += c; break
                        case 'Y': s += pad(date.getFullYear()); break
                        case 'm': s += pad((date.getMonth() + 1)); break
                        case 'd': s += pad(date.getDate()); break
                        case 'H': s += pad(date.getHours()); break
                        case 'M': s += pad(date.getMinutes()); break
                        case 'S': s += pad(date.getSeconds()); break
                        case 'a': s += week[date.getDay()]; break
                        }
                    }
                    break
                }
            }

            return s
        }

        document.addEventListener('DOMContentLoaded', () => {
            let s

            s = formatDate('%Y-%m-%d (%a) %H:%M:%S', new Date())
            console.log(s)
            console.assert(s.match(/^[0-9]+-[0-9]+-[0-9]+ \(.\) [0-9]+:[0-9]+:[0-9]+$/))

            s = formatDate('%H:%M:%S (%a) %Y-%m-%d', new Date())
            console.log(s)
            console.assert(s.match(/^[0-9]+:[0-9]+:[0-9]+ \(.\) [0-9]+-[0-9]+-[0-9]+$/))

            s = formatDate('%% %o', new Date())
            console.log(s)
            console.assert(s === '% o')
        })
    </script>
</head>
<body>

</body>
</html>