JavaScriptで時刻を表す文字列をymdのフォーマットに整形する
329, 2020-06-03
時刻をymdのフォーマットに整形する
時刻をymd
のフォーマットに整形する、つまり、「〇〇〇〇年〇〇月〇〇日」のフォーマットにしたいわけですが、みなさんならどんな実装を考えますか?
私は、ついさっきこんな関数を作りました。
:::javascript
/**
* 数値を0埋めの二桁の文字列にする
*
* @param {Number} n
*/
export function pad2 (n) {
if (n < 10) {
return '0' + n
}
return '' + n
}
/**
* 時刻文字列から YMD 形式の時刻文字列を生成する
* format は 'jpn', '-', '/' のいずれかである
*
* @param {String} strDatetime ソースとなる時刻の文字列
* @param {String} format フォーマット
*
* @return {String}
*/
export function ymd (strDatetime, format='jpn') {
if (typeof strDatetime !== 'string') {
throw new Error('invalid type')
}
const d = new Date(strDatetime)
const y = d.getFullYear()
const m = pad2(d.getMonth() + 1)
const D = pad2(d.getDate())
switch (format) {
default:
throw new Error('invalid format')
break
case 'jpn':
return `${y}年${m}月${D}日`
break;
case '-':
return `${y}-${m}-${D}`
break;
case '/':
return `${y}/${m}/${D}`
break;
}
}
関数ymd
が今回の主役です。この関数の引数には、時刻を表す文字列を渡します。
時刻を表す文字列というのは
2020-06-03T01:06:52.174569+09:00
というような文字列のことです。このフォーマットの文字列は、Date
クラスに渡すことが出来ます。
ymd
関数は内部でDate
クラスを呼び出し、メソッドから年月日を取り出しています。そしてその年月日を使って引数format
のフォーマットに応じて、時刻を整形しています。
Django
やRails
などのフレームワークを使い、SPAなどを作っていると、こういった時刻を指定のフォーマットに整形したいシーンが多く見られます。
この関数を使えば
- 2020年06日03日
- 2020-06-03
- 2020/06/03
などのフォーマットに対応できるので便利かもしれません。