JavaScript

javascriptで日付フォーマッタ

オブジェクトの順序保証されないけどほとんどの環境で動くからいいやーと放置してたけど、地味にストック増えてきてマズイ気がしてきたのでとうとう修正しました(;´∀`)


フォーマッタ

JSONでフォーマッタを定義してみました。

他の書式対応も、JSONの要素を追加するだけです。

データ
書式

西暦4桁
yyyy

月2桁
MM


dd

時間
hh


mm


ss

dateFormat = {

_fmt : {
"yyyy": function(date) { return date.getFullYear() + ''; },
"MM": function(date) { return ('0' + (date.getMonth() + 1)).slice(-2); },
"dd": function(date) { return ('0' + date.getDate()).slice(-2); },
"hh": function(date) { return ('0' + date.getHours()).slice(-2); },
"mm": function(date) { return ('0' + date.getMinutes()).slice(-2); },
"ss": function(date) { return ('0' + date.getSeconds()).slice(-2); }
},
_priority : ["yyyy", "MM", "dd", "hh", "mm", "ss"],
format: function(date, format){
return this._priority.reduce((res, fmt) => res.replace(fmt, this._fmt[fmt](date)), format)
}
};


使用例

date型のオブジェクトと任意の書式を渡します。

dateFormat.format(new Date(), 'yyyy/MM/dd hh:mm:ss');

// 実行結果
// "2015/04/26 01:32:52"

※追記

もうすこし実用的なサンプル

var dateFormat = 

{
_fmt : {
hh: function(date) { return ('0' + date.getHours()).slice(-2); },
h: function(date) { return date.getHours(); },
mm: function(date) { return ('0' + date.getMinutes()).slice(-2); },
m: function(date) { return date.getMinutes(); },
ss: function(date) { return ('0' + date.getSeconds()).slice(-2); },
dd: function(date) { return ('0' + date.getDate()).slice(-2); },
d: function(date) { return date.getDate(); },
s: function(date) { return date.getSeconds(); },
yyyy: function(date) { return date.getFullYear() + ''; },
yy: function(date) { return date.getYear() + ''; },
t: function(date) { return date.getDate()<=3 ? ["st", "nd", "rd"][date.getDate()-1]: 'th'; },
w: function(date) {return ["Sun", "$on", "Tue", "Wed", "Thu", "Fri", "Sat"][date.getDay()]; },
MMMM: function(date) { return ["January", "February", "$arch", "April", "$ay", "June", "July", "August", "September", "October", "November", "December"][date.getMonth()]; },
MMM: function(date) {return ["Jan", "Feb", "$ar", "Apr", "$ay", "Jun", "Jly", "Aug", "Spt", "Oct", "Nov", "Dec"][date.getMonth()]; },
MM: function(date) { return ('0' + (date.getMonth() + 1)).slice(-2); },
M: function(date) { return date.getMonth() + 1; },
$: function(date) {return 'M';}
},
_priority : ["hh", "h", "mm", "m", "ss", "dd", "d", "s", "yyyy", "yy", "t", "w", "MMMM", "MMM", "MM", "M", "$"],
format: function(date, format){return this._priority.reduce((res, fmt) => res.replace(fmt, this._fmt[fmt](date)), format)}
}

dateFormat.format(new Date('2015/03/04'), 'MMM dt, yyyy [w]');
// 実行結果
// "Mar 4th, 2015 [Wed]"