プロジェクトでは、使用するプラグインmPicker.jsの制限のため、日付jsonを生成するコードを記述し、ここに記録しました。
生成される形式は次のとおりです。子には12か月あり、子の下には対応する日があります。
このコードは、最初の49年間、次の50年間、および現在の年の合計100年間の日付を生成できます。
function getDateJson() {
var _prevY = [],
_nextY = [],
_allY = [],
_allM = [],
_allD = [];
var def = new Date(),
year = def.getFullYear(),
month = def.getMonth() + 1,
day = def.getDate();
for (var i = 1; i <= 31; i++) {
// 日
_allD.push({
"name": (i < 10 ? ('0' + i) : i) + '日', "value": (i < 10 ? ('0' + i) : i) })
}
for (var i = 1; i <= 12; i++) {
// 月
var _monthD = Object.assign([], _allD);
switch(i) {
case 4, 6, 9, 11:
_monthD.splice(_monthD.length, 1);
break;
default:
break;
}
_allM.push({
"name": (i < 10 ? ('0' + i) : i) + '月', "value": (i < 10 ? ('0' + i) : i), child: _monthD });
}
for (var i = 49; i >= 0; i--) {
var _upY = year + i + 1;
var _downY = year - i;
var _yearD = Object.assign([], _allM);
// 后50年
if((_downY%4==0 && _downY%100!=0) || (_downY%100==0 && _downY%400==0)) {
_yearD[1].child.splice(28, 1)
_prevY.push({
"name": _downY + '年', "value": _downY + '', child: _yearD });
} else {
_yearD[1].child.splice(29, 1)
_prevY.push({
"name": _downY + '年', "value": _downY + '', child: _yearD });
}
// 前50年
if((_upY%4==0 && _upY%100!=0) || (_upY%100==0 && _upY%400==0)) {
_yearD[1].child.splice(28, 1)
_nextY.unshift({
"name": _upY + '年', "value": _upY + '', child: _yearD });
} else {
_yearD[1].child.splice(29, 1)
_nextY.unshift({
"name": _upY + '年', "value": _upY + '', child: _yearD });
}
}
_allY = _prevY.concat(_nextY);
return _allY;
}
添付:
2月の日数の計算2月の日数は、主にうるう年かどうか、うるう年の場合は29日、うるう年でない場合は28日によって異なります。
一般に、数学演算またはグレゴリオ暦年法では、100で割り切れるが、400で割り切れない年を除いて、4で割り切れる年のほとんどはうるう年です。
1.世紀以外の年は4で割り切れる可能性があり、うるう年は100で割り切れません。(たとえば、2004年はうるう年ですが、1901年はうるう年ではありません)
2。世紀に400で割り切れるうるう年はうるう年です。(2000年はうるう年ですが、1900年はうるう年ではありません)