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