分別以天數和歲數輸入年齡時比較大小是否合理
阿新 • • 發佈:2018-11-17
應用場景:比如買保險時,有承保的年齡範圍,小到幾天的嬰兒,大到無上限或幾歲。輸入年齡範圍時可選擇“天”也可選擇“歲”。那麼如果選擇是“500天——1歲”,是不是就不合理了呢,1歲=365或366天。此時可用以下程式碼進行判斷。
僅用於前“天”後“歲”的轉換並比較
function reasonale(day, year) {//通過比較出生日期前後判斷
var nowY = new Date().getFullYear();// 當前年份
var nowM = new Date().getMonth();// 當前月份
var nowD = new Date().getUTCDay();// 當前天
var start = new Date(nowY, nowM, nowD - day).toLocaleDateString();// 起始日期,越小越老
var end = new Date(nowY - year, nowM, nowD).toLocaleDateString();// 終止日期,越大越年輕
start = Date.parse(start.replace('/-/g', '/'));
end = Date.parse(end.replace('/-/g', '/'));
return start - end > 0 ? true : false ;// 後年齡(year)大於前年齡(day)
}
頁面內容:根據實際生活與業務分析,為使得使用者體驗良好,可先讓起始年齡以“天”為單位預設選中,終止年齡以“歲”為單位預設選中。
<div class="layui-input-block " id="limitStr">
<div class="layui-input-inline" style="width: 80px">
<input type="text" class="layui-input starDAY" autocomplete="off">
</div>
<div class="layui-input-inline" style="width: 60px">
<select class="starDAY" lay-filter="starDAY">
<option th:value="D" selected="">天</option>
<option th:value="Y">歲</option>
</select>
</div>
<div class="layui-input-inline" style="width: 30px">
<span style="height: 30px; line-height: 30px;"> —— </span>
</div>
<div class="layui-input-inline" style="width: 80px">
<input type="text" class="layui-input endDAY" autocomplete="off">
</div>
<div class="layui-input-inline" style="width: 60px">
<select class="endDAY">
<option th:value="Y" selected="">歲</option>
<option th:value="D">天</option>
</select>
</div>
</div>
js監聽select選擇框起始年齡的單位的選中情況,如果起始年齡選擇的是“歲”,則使得終止年齡僅可以以“歲”為單位,讓禁用”天”選項;否則,若起始年齡選擇的是“天”,則去掉終止年齡“天”的禁用屬性,使其重新可選。這樣就不會出現前大後小、前歲後天的情況了。
form.on('select(starDAY)', function(data) {
var $option = $(".endDAY option[value='D']");
$("select.endDAY").val('Y');
$("input.endDAY").val('');
if (data.value === 'Y') {
$option.attr("disabled", true);
} else {
$(".endDAY option[value='D']").removeAttr("disabled");
}
form.render('select');
});
表單提交時檢驗輸入年齡範圍是否合理
var ageLimit = '';
var starN = $("input.starDAY").val();
var starS = $("select.starDAY").val();// 起始時間選擇為'天'的時候,才可能出現'天'與'歲'的比較
var endS = $("select.endDAY").val();
var endN = $("input.endDAY").val();
if (endN === '') {// 年齡無上限,不比較
endN = '0';
} else if (starS === 'D' && endS === 'Y') {// 前‘天’後‘歲’
var star = parseInt(starN);
var end = parseInt(endN);
if (!reasonale(star, end)) {
layer.msg("終止年齡不可比起始年齡小");
return;
}
} else {// 單位相同,要麼都是“天”,要麼都是“歲”,直接比較年齡大小
if (end < star) {
layer.msg("終止年齡不可比起始年齡小");
return;
}
}
ageLimit = ageLimit + starN + starS + "-" + endN + endS;
$("input[name=ageLimit]").val(ageLimit);
小知識:new Date(year, month, day).toLocaleDateString()可以獲得正確的日期格式。