{{ year | gengou }}
<div id="app">
<p><input type="number" v-model="year"></p>
<p>{{ year | gengou }}</p>
</div>
new Vue({
el: '#app',
data: {
year: 1986
},
filters: {
gengou(year) {
if (!year || year <= 1868 || year >= 2019) return year
let result;
const d = new Date(new Date().setFullYear(year));
const w = {
'平成': '1989/01/08',
'昭和': '1926/12/25',
'大正': '1912/07/30',
'明治': '1868/01/25'
};
const y = d.getFullYear();
let r = d.toLocaleDateString('ja-JP-u-ca-japanese');
r = r.replace(/^.*?(\d{1,2}).+?$/g, '$1');
const getDate = (x, r) => {
return x + r
}
const ua = navigator.userAgent.toLowerCase();
if (!/msie|trident\/7|edge/.test(ua)) {
const m = new Date('1868/09/07');
if (d <= m) r -= 3;
}
if (Number(r) === 1) r = '元';
if (d >= new Date(w['平成'])) {
result = getDate('平成', r, d);
} else if (d >= new Date(w['昭和'])) {
result = getDate('昭和', r, d);
} else if (d >= new Date(w['大正'])) {
result = getDate('大正', r, d);
} else if (d >= new Date(w['明治'])) {
result = getDate('明治', r, d);
}
return result;
}
}
})