zoukankan      html  css  js  c++  java
  • 租房短租发布场地,工作中遇到的复杂日期插件功能

    用到layui框架,因此要加载layui.css  layui.js

    涉及到日期时间区间的滑动,因此要加载swiper.css   swiper.js

    <!DOCTYPE HTML>
    <html>

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1, maximum-scale=1,user-scalable=no" />
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="blank" />
    <title>选择日期</title>
    <link rel="stylesheet" type="text/css" href="" />
    <link rel="stylesheet" type="text/css" href="css/layui.css" />
    <link rel="stylesheet" type="text/css" href="css/swiper-4.3.5.min.css" />
    </head>

    <body>
    <input type="hidden" value="<?php echo $housing_id ?>" class="housing">
    <div class="header-time">
    <div class="begin-time">起
    <input type="text" id="begin-in" class="timeval" />
    </div>
    <div class="totaldays"> <span>0</span>天</div>
    <div class="end-time">
    <input type="text" id="end-in" class="timeval" />终</div>
    </div>
    <div class="site-demo-laydate bd-datebar">
    <div class="layui-inline init-date-fff" id="range-time-box"></div>
    <div class="zhanshichajian"></div>
    </div>
    <div class="layui-form switch-check-control" action="">
    <div class="layui-form-item">
    <div class="switch-shadow"></div>
    <div class="layui-input-block">
    <input type="checkbox" name="zzz" lay-skin="switch" lay-skin="switch" lay-filter="switchTest" lay-text="全选|取消">
    </div>
    </div>
    </div>
    <div class="swiper-content-bd">
    <div class="swiper-hours-main">
    <div class="swiper-container">
    <div class="swiper-wrapper js-timestr">
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="8">08:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="9">09:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="10">10:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="11">11:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="12">12:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="13">13:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="14">14:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="15">15:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="16">16:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="17">17:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="18">18:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="19">19:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="20">20:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="21">21:00</a>
    </div>
    <div class="swiper-slide"><a href="javascript:;" class="hourRange-checked-btn" orderSortid="22">22:00</a>
    </div>
    </div>
    </div>
    </div>
    </div>
    <div class="time-range-bd">
    <div class="selected-time-range-list">
    <h3 class="st-range-hd">已选<em>0</em>时间段(重复时间段可自动删除)<a href="javascript:;" class="more-show-btn">更多</a></h3>
    <ul class="range-list-items"></ul>
    </div>
    </div>
    <div class="foot-section">
    <div class="footbd"> <a href="javascript:;" class="add-btn">添加</a>
    <a href="javascript:;" class="save-btn">保存</a>
    </div>
    </div>
    </body>

    </html>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script src="layui/layui.js"></script>
    <script src="js/swiper-4.3.5.min.js" type="text/javascript"></script>
    <script>
    var mySwiper = new Swiper('.swiper-container', {
    prevButton: '.swiper-button-prev',
    nextButton: '.swiper-button-next',
    slidesPerView: 6,
    paginationClickable: true
    })
    </script>
    <script type="text/javascript">
    layui.use(['form', 'laydate'], function() {
    var form = layui.form,
    laydate = layui.laydate;
    var endDateBindymd; //选择日期,年月日
    getHasAddedtr();
    setTimeout(function() {
    initdateplugs();
    }, 500)
    //获取已添加日期
    function getHasAddedtr() {
    $.ajax({
    type: "post",
    url: "",
    dataType: 'json',
    data: {},
    success: function(data) {
    if (data['Datesettingslist'].length > 0) {
    var timesRangeStr = "";
    $.each(data['Datesettingslist'], function(i, n) {
    timesRangeStr += '<li checkissaveid="' + n.h_time_id + '" class="ajaxgetdata"><span>' + n.Datesettings + '</span><a href="javascript:;" class="ajaxdelete-btn">取消</a></li>';
    });
    $(".range-list-items").html(timesRangeStr);
    $("#begin-in").val(data['housing_begin']);
    $("#end-in").val(data['housing_end']);
    $(".st-range-hd em").html($(".range-list-items li").size());
    getDays(data['housing_begin'], data['housing_end']);
    }
    }
    })
    }
    //获得两个日期之间相差的天数
    function getDays(date1, date2) {
    var date1Str = date1.split("-"); //将日期字符串分隔为数组,数组元素分别为年.月.日
    //根据年 . 月 . 日的值创建Date对象
    var date1Obj = new Date(date1Str[0], (date1Str[1] - 1), date1Str[2]);
    var date2Str = date2.split("-");
    var date2Obj = new Date(date2Str[0], (date2Str[1] - 1), date2Str[2]);
    var t1 = date1Obj.getTime();
    var t2 = date2Obj.getTime();
    var dateTime = 1000 * 60 * 60 * 24; //每一天的毫秒数
    var minusDays = Math.floor(((t2 - t1) / dateTime)); //计算出两个日期的天数差
    var days = Math.abs(minusDays) + 1; //取绝对值
    if (days > 180) {
    $(".switch-shadow").show();
    layer.msg("时间天数最长为180天,请重新选择");
    $("#end-in").val("");
    return false;
    } else {
    $(".switch-shadow").hide();
    }
    $(".totaldays span").html(days);
    }
    //已添加日期后,初始化可选择日期
    function initdateplugs() {
    var val = $("#begin-in").val();
    var val2 = $("#end-in").val();
    if (val && val2) {
    $(".bd-datebar .layui-laydate").remove();
    $(".zhanshichajian").remove();
    laydate.render({
    elem: '.init-date-fff',
    min: val,
    max: val2,
    showBottom: false,
    ready: function(value, date) {
    endDateBindymd = $(".layui-this").attr("lay-ymd");
    var ymdarr = endDateBindymd.split('-');
    if (ymdarr[1] < 10) {
    var ymdarrMonth = '0' + ymdarr[1];
    } else {
    ymdarrMonth = ymdarr[1];
    }
    if (ymdarr[2] < 10) {
    var ymdarrDay = '0' + ymdarr[2];
    } else {
    ymdarrDay = ymdarr[2];
    }
    var ymdarrstr = ymdarr[0] + '-' + ymdarrMonth + '-' + ymdarrDay;
    console.log(ymdarrstr);
    endDateBindymd = ymdarrstr
    },
    change: function(value, date, endDate) {
    console.log(dateToStrend(date));
    if ($(".layui-form-switch").hasClass("all-checked-active")) {
    setTimeout(function() {
    addlayuithisClassname();
    }, 100)
    } else {
    var $dateplugstdcontrol = $(".bd-datebar table tbody tr td");
    $dateplugstdcontrol.each(function() {
    if (dateToStrend(date) == $(this).attr("lay-ymd")) {
    $(this).addClass("layui-this");
    }
    })
    }
    },
    done: function(value, date) {
    endDateBindymd = dateToStrend(date);
    },
    position: 'static'
    });
    } else {}
    }
    //限定可选日期
    //限定可选日期
    function dateToStr(date) {
    day = date.date;
    var month = date.month;
    if (month < 10) {
    month = '0' + month;
    } else {
    month = date.month;
    }
    if (day < 10) {
    day = '0' + day;
    } else {
    day = day;
    }
    return date.year + '-' + month + '-' + day;
    }

    function dateToStrend(date) {
    day = date.date;
    var month = date.month;
    if (month < 10) {
    month = '0' + month;
    } else {
    month = date.month;
    }
    if (day < 10) {
    day = '0' + day;
    } else {
    day = day;
    }
    return date.year + '-' + month + '-' + day;
    }
    //页面打开,未选择开始结束日期,展示日期
    laydate.render({
    elem: ".zhanshichajian",
    position: 'static',
    showBottom: false
    })
    //选择开始日期,结束日期,显示可选日期段
    layui.use(['laydate'], function() {
    var laydate = layui.laydate;
    var val2;
    laydate.render({
    elem: '#begin-in',
    showBottom: false,
    min: 'layuidate.now()',
    done: function(value, date) {
    var val = dateToStr(date);
    if (val2) {
    $("#range-time-box").removeClass("init-date-fff").addClass("db-date-plugs");
    $(".bd-datebar .layui-laydate").remove();
    $(".zhanshichajian").remove();
    getDays(val, val2);
    laydate.render({
    elem: '#range-time-box',
    min: val,
    max: val2,
    showBottom: false,
    ready: function() {},
    change: function(value, date, endDate) {
    console.log(dateToStrend(date));
    if ($(".layui-form-switch").hasClass("all-checked-active")) {
    setTimeout(function() {
    addlayuithisClassname();
    }, 100)
    } else {
    var $dateplugstdcontrol = $(".bd-datebar table tbody tr td");
    $dateplugstdcontrol.each(function() {
    if (dateToStrend(date) == $(this).attr("lay-ymd")) {
    $(this).addClass("layui-this");
    }
    })
    }
    },
    done: function(value, date) {
    endDateBindymd = dateToStrend(date);
    console.log(endDateBindymd);
    },
    position: 'static'
    });
    } else {
    laydate.render({
    elem: '#end-in',
    showBottom: false,
    min: val,
    done: function(value, date) {
    $("#range-time-box").removeClass("init-date-fff").addClass("db-date-plugs");
    $(".bd-datebar .layui-laydate").remove();
    $(".zhanshichajian").remove();
    //直接嵌套显示
    val2 = dateToStrend(date);
    getDays(val, val2);
    laydate.render({
    elem: '#range-time-box',
    min: val,
    max: val2,
    showBottom: false,
    ready: function() {},
    change: function(value, date, endDate) {
    console.log(dateToStrend(date));
    if ($(".layui-form-switch").hasClass("all-checked-active")) {
    setTimeout(function() {
    addlayuithisClassname();
    }, 100)
    } else {
    var $dateplugstdcontrol = $(".bd-datebar table tbody tr td");
    $dateplugstdcontrol.each(function() {
    if (dateToStrend(date) == $(this).attr("lay-ymd")) {
    $(this).addClass("layui-this");
    }
    })
    }
    },
    done: function(value, date) {
    endDateBindymd = dateToStrend(date);
    // console.log(endDateBindymd);
    },
    position: 'static'
    });
    }
    });
    }
    }
    });
    });
    //监听指定开关
    form.on('switch(switchTest)', function(data) {
    if (this.checked == true) {
    $(".layui-form-switch").addClass("all-checked-active");
    //全选
    addlayuithisClassname()
    } else {
    $(".layui-form-switch").removeClass("all-checked-active");
    var $tcj = $(".bd-datebar td");
    $tcj.each(function() {
    if ($(this).hasClass("layui-this")) {
    $(this).removeClass("layui-this");
    } else {}
    })
    }
    });
    //全选
    function addlayuithisClassname() {
    var $dateplugstd = $(".bd-datebar table tbody tr td");
    var topbegindate = $("#begin-in").val();
    $dateplugstd.each(function() {
    // var layymd = $(this).attr("lay-ymd");
    if ($(this).hasClass("laydate-disabled")) {} else {
    $(this).addClass("layui-this");
    }
    })
    }
    //选择时间段
    $(".hourRange-checked-btn").click(function() {
    var $onClassName = $(".active_time");
    var onlen = $onClassName.length;
    var $endon = $(".active_time_end");
    var endonlen = $endon.length;
    if ($(this).hasClass("active_time")) {
    // $(this).removeClass().addClass("hourRange-checked-btn");
    $(this).attr('class', 'hourRange-checked-btn');
    } else {
    //已经选2个时间
    if (onlen == 2) {
    layer.msg("最多选俩个时间");
    return false;
    } else if (onlen == 0) {
    $(this).addClass("active_time_begin").addClass("active_time");
    } else {
    if (endonlen == 1) {
    $(this).addClass("active_time_begin").addClass("active_time");
    } else {
    $(this).addClass("active_time_end").addClass("active_time");
    }
    }
    }
    })
    //添加已选中日期和时间
    $(".add-btn").click(function() {
    var $dateSel = $(".bd-datebar .layui-laydate-content td.layui-this");
    var dateSellen = $dateSel.length;
    //
    if (dateSellen == 1) {
    var osid_first = parseInt($(".active_time_begin").attr("orderSortid"));
    var osid_second = parseInt($(".active_time_end").attr("orderSortid"));
    var hourRangeStr = '';
    var beginingtime;
    var endingtime;
    if (osid_first < osid_second) {
    hourRangeStr = $(".active_time_begin").text() + '-' + $(".active_time_end").text();
    beginingtime = $(".active_time_begin").text();
    endingtime = $(".active_time_end").text();
    } else {
    hourRangeStr = $(".active_time_end").text() + '-' + $(".active_time_begin").text();
    beginingtime = $(".active_time_end").text();
    endingtime = $(".active_time_begin").text();
    }
    if (endDateBindymd == undefined) {
    layer.msg("请选择日期和时间");
    return false;
    }
    var endSaveDateStr = endDateBindymd + ' ' + hourRangeStr;
    if ($(".active_time_begin").text() == '' || $(".active_time_end").text() == '' || endDateBindymd == '') {
    layer.msg("请先选择日期和时间");
    return false;
    }
    var checkbegintime = endDateBindymd + ' ' + beginingtime;
    var checkendtime = endDateBindymd + ' ' + endingtime;
    //判断添加的日期是否存在
    var $hasCheckedTimeRange = $(".range-list-items li");
    var hasCheckrtlen = $hasCheckedTimeRange.length;
    var hasChecktrArr = [];
    if (hasCheckrtlen > 0) {
    $hasCheckedTimeRange.each(function() {
    hasChecktrArr.push($(this).attr("checkissaveid"));
    })
    if (isInArray(hasChecktrArr, endDateBindymd) == true) {
    layer.msg("请勿重复添加");
    return false;
    } else {
    var pj_listr = '<li checkissaveid="' + endDateBindymd + '" checkpostymd="' + endDateBindymd + '" checkpostymdbt="' + checkbegintime + '" checkpostymdet="' + checkendtime + '"><span>' + endSaveDateStr + '</span><a href="javascript:;" class="jsnodelete-btn">取消</a></li>';
    $(".range-list-items").append(pj_listr);
    $(".st-range-hd em").html($(".range-list-items li").size());
    }
    } else {
    var pj_listr = '<li checkissaveid="' + endDateBindymd + '" checkpostymd="' + endDateBindymd + '" checkpostymdbt="' + checkbegintime + '" checkpostymdet="' + checkendtime + '"><span>' + endSaveDateStr + '</span><a href="javascript:;" class="jsnodelete-btn">取消</a></li>';
    $(".range-list-items").append(pj_listr);
    $(".st-range-hd em").html($(".range-list-items li").size());
    }
    } else {
    //判断添加的日期是否存在
    var $hasCheckedTimeRange = $(".range-list-items li");
    var hasCheckrtlen = $hasCheckedTimeRange.length;
    var hasChecktrArr = [];
    if (hasCheckrtlen > 0) {
    $hasCheckedTimeRange.each(function() {
    hasChecktrArr.push($(this).attr("checkissaveid"));
    })
    if (isInArray(hasChecktrArr, endDateBindymd) == true) {
    layer.msg("请勿重复添加");
    return false;
    } else {
    getAll($("#begin-in").val(), $("#end-in").val());
    $(".st-range-hd em").html($(".range-list-items li").size());
    }
    } else {
    getAll($("#begin-in").val(), $("#end-in").val());
    $(".st-range-hd em").html($(".range-list-items li").size());
    }
    }
    })
    //遍历开始日期到结束日期
    Date.prototype.format = function() {
    var s = '';
    s += this.getFullYear() + '-'; // 获取年份。
    if ((this.getMonth() + 1) < 10) {
    s += '0' + (this.getMonth() + 1) + "-";
    } else {
    s += (this.getMonth() + 1) + "-"; // 获取月份。
    }
    if (this.getDate() < 10) {
    s += '0' + this.getDate();
    } else {
    s += this.getDate(); // 获取日。
    }
    return (s); // 返回日期。
    };

    function getAll(begin, end) {
    var ab = begin.split("-");
    var ae = end.split("-");
    var db = new Date();
    db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]);
    var de = new Date();
    de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]);
    var unixDb = db.getTime();
    var unixDe = de.getTime();
    var allselectstr = '';
    allselectstr += "<li checkissaveid=" + $("#begin-in").val() + "><span>" + $("#begin-in").val() + ' 08:00-22:00' + "</span><a class="jsnodelete-btn">取消</a></li>";
    for (var k = unixDb + 24 * 60 * 60 * 1000; k < unixDe;) {
    allselectstr += "<li checkissaveid=" + (new Date(parseInt(k))).format() + "><span>" + (new Date(parseInt(k))).format() + ' 08:00-22:00' + "</span><a class="jsnodelete-btn">取消</a></li>";
    console.log((new Date(parseInt(k))).format() + ' 08:00-22:00');
    k = k + 24 * 60 * 60 * 1000;
    }
    allselectstr += "<li checkissaveid=" + $("#end-in").val() + "><span>" + $("#end-in").val() + ' 08:00-22:00' + "</span><a class="jsnodelete-btn">取消</a></li>";
    $(".range-list-items").html(allselectstr);
    }
    //判断数组中是否存在某元素
    function isInArray(arr, value) {
    for (var i = 0; i < arr.length; i++) {
    if (value === arr[i]) {
    return true;
    }
    }
    return false;
    }
    //点击取消
    $(document).on("click", ".jsnodelete-btn", function() {
    $(this).parent("li").remove();
    $(".st-range-hd em").html($(".range-list-items li").size());
    })
    //取消已保存日期
    $(document).on("click", ".ajaxdelete-btn", function() {
    var _this = $(this).parent("li");
    var deleteid = $(this).parent("li").attr("checkissaveid");
    $.ajax({
    type: "post",
    url: "",
    dataType: 'json',
    data: {},
    success: function(data) {
    if (data == 1) {
    layer.msg("取消成功");
    _this.remove();
    } else {
    layer.msg("取消失败");
    }
    }
    });
    })
    //点击保存
    $(".save-btn").click(function() {
    var savepostarr = [];
    var $savehasstr = $(".range-list-items li");
    var savehasstrlen = $savehasstr.length;
    $savehasstr.each(function() {
    if ($(this).hasClass("ajaxgetdata")) {} else {
    savepostarr.push($(this).children("span").text());
    }
    })
    savepostarr = savepostarr.join(",");
    console.log(savepostarr);
    // return false;
    $.ajax({
    type: "post",
    url: "",
    dataType: 'json',
    data: {},
    success: function(data) {
    if (data) {
    console.log(data);
    layer.msg("保存成功");
    // window.location.href="";
    } else {
    layer.msg("保存失败,请稍候再试");
    return false;
    }
    },
    error: function() {
    console.log("服务器请求失败,请稍候再试");
    }
    });
    })
    })
    </script>

  • 相关阅读:
    react-native-开发环境搭建
    深入理解js中的立即执行函数(function(){…})()
    html-webpack-plugin详解
    window.getComputedStyle——ref
    react-hot-loader 的配置【局部刷新】--{create-react-app}
    es6 export、import
    echarts 金字塔
    JFinal源码详解
    如何使用JFinal开发javaweb
    MySQL如何修改密码
  • 原文地址:https://www.cnblogs.com/mhtss/p/9540935.html
Copyright © 2011-2022 走看看