1. 程式人生 > >分別以天數和歲數輸入年齡時比較大小是否合理

分別以天數和歲數輸入年齡時比較大小是否合理

應用場景:比如買保險時,有承保的年齡範圍,小到幾天的嬰兒,大到無上限或幾歲。輸入年齡範圍時可選擇“天”也可選擇“歲”。那麼如果選擇是“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()可以獲得正確的日期格式。
這裡寫圖片描述