精华内容
下载资源
问答
  • 时间自定义:特定时间段设置 图片 主题代码:只需要引入layui.css和layui.js即可看到效果 注意一点,两个laydate中的format属性里的格式写法,必须不能出现重名的,否则会前者的值会覆盖后者,比如:type为...

    时间自定义:特定时间段设置

    演示:

    • 主题代码:只需要引入layui.css和layui.js即可看到效果

    • 注意一点,两个laydate中的format属性里的格式写法,必须不能出现重名的,否则会前者的值会覆盖后者,比如:type为date:yyyy-mm-dd和type为time:HH:mm,就会出现后者选时间分钟时一直为前者的月份,这是一个注意事件:正确写法代码中写的即可

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <title></title>
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/layui/2.6.8/css/layui.css" />
      <style>
    
      </style>
    </head>
    
    <body>
      <div class="layui-fluid" style="padding:10px">
        <form class="layui-form">
          <input type="hidden" id="appointmentDate" value="6,7">
          <input type="text" id="time" style="text-align: center" class="layui-input" placeholder="hh:mm"
            autocomplete="off" />
          <input type="text" style="text-align: center" class="layui-input inputTime" id="appointmentDate"
            placeholder="yyyy-mm-dd" autocomplete="off" />
          <input type="text" id="time1" style="text-align: center" class="layui-input" placeholder="hh:mm"
            autocomplete="off" />
        </form>
      </div>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/layui/2.6.8/layui.js"></script>
      <script>
        layui.use(['form', 'util', 'laydate'], function () {
          var form = layui.form;
          var util = layui.util;
          var $ = layui.jquery;
          var laydate1 = layui.laydate;
          var laydate2 = layui.laydate;
    
          //用章时间联动:日期
          laydate1.render({
            elem: '#appointmentDate',
            type: 'date',
            format: 'yyyy-MM-dd',
            min: new Date().toLocaleString(),
            ready: function (value) {
              disabled_date(value, $("#appointmentDate").val());
            },
            change: function (value, date) {
              disabled_date(date, $("#appointmentDate").val());
            },
            done: function (value, arr) {
              console.log(value, arr);
              $('#time').val('').focus();
            }
          });
          //时间
          laydate2.render({
            elem: '#time',
            type: 'time',
            format: 'HH:mm',
            trigger: 'click',
            ready: formatminutes,
            done: function (val, arr) {
              layer.confirm('即将禁止时间改动,是否确认?',
                function (index, layero) {
                  $('#appointmentDate,#time').prop('disabled', true);
                  $('#appointmentDate,#time').css('backgroundColor', '#f2f2f2');
                  layer.close(index);
                });
            }
          });
          //时间
          laydate2.render({
            elem: '#time1',
            type: 'time',
            format: 'HH:mm',
            trigger: 'click',
            done: function (val, arr) {}
          });
          //周六周日不可选
          function disabled_date(value, appointmentDate) {
            var mm = value.year + '-' + value.month + '-' + value.date;
            $('.laydate-theme-grid table tbody').find('[lay-ymd="' + mm + '"]').removeClass('layui-this');
            if (appointmentDate != null && appointmentDate != '') {
              var dates = appointmentDate.split(",");
              for (var i = 0; i < dates.length; i++) {
                if (dates[i] == "7") {
                  dates[i] = 0;
                }
                $("table>tbody>tr").find("td:eq(" + dates[i] + ")").addClass('laydate-disabled');
              }
            }
          }
    
          function formatminutes(date) {
    
            var aa = $(".laydate-time-list li ol")[0];
            var bb = $(".laydate-time-list li ol")[1];
            var showtime1 = $(aa).find("li");
            var showtime2 = $(bb).find("li");
    
            for (var i = 0; i < showtime1.length; i++) {
              var t00 = showtime1[i].innerText;
              if (t00 != "09" && t00 != "10" && t00 != "11" && t00 != "12" && t00 != "13" && t00 != "14" && t00 !=
                "15" && t00 != "16" && t00 != "17" && t00 != "18") {
                showtime1[i].remove()
              }
            }
            for (var i = 0; i < showtime2.length; i++) {
              var t01 = showtime2[i].innerText;
              if (t01 != "00" && t01 != "15" && t01 != "30" && t01 != "45") {
                showtime2[i].remove()
              }
            }
            $($(".laydate-time-list li p")[2]).remove(); //清除汉字秒
            $($(".laydate-time-list li ol")[2]).remove(); //清空秒
            $($(".laydate-time-list li ol")[2]).find("li").remove(); //清空秒
            // $(aa).find("li:first").addClass('layui-this')
    
            // 重新获取下当前的li的个数  -- 处理过去时间不可选的情况
            var aaLi = $(aa).find("li").get();
            var bbLi = $(bb).find("li").get();
            var todayMonth = new Date().getMonth() + 1;
            var tomorrowdDay = new Date().getDate() + 1; // 23 ---> 24
            var tomorrowDate = new Date().getFullYear() + '-' + todayMonth + '-' + tomorrowdDay + ' 00:00:00'
            var tomorrowTime = new Date(tomorrowDate).getTime();
            var inputTime = new Date($('.inputTime').val() || null).getTime();
            var Hours = new Date().getHours();
            var Minutes = new Date().getMinutes();
            console.log('点击');
            // 循环小时,添加禁止类名 layui-disabled -- 处理过去时间不可选的情况
            let circulateAA = function (params) {
              aaLi.forEach((value, index) => {
                let text = parseInt(value.innerText);
                if (inputTime > tomorrowTime) {
                  // 选项时间大于明天时间全部可用
                  $(value).removeClass('layui-disabled').css({
                    'pointer-events': ''
                  })
                } else if (inputTime < tomorrowTime && text < Hours) {
                  console.log('inputTime < tomorrowTime');
                  $(value).addClass('').addClass('layui-disabled').css({
                    'pointer-events': ''
                  })
                }
                console.log('aaLi', text);
              })
            }
    
            // 循环分钟,添加禁止类名 layui-disabled -- 处理过去时间不可选的情况
    
            let circulateBB = function (params) {
              bbLi.forEach((value, index) => {
                // $(value).removeClass('layui-this')
                let text = parseInt(value.innerText);
                if (inputTime > tomorrowTime) {
                  // 选项时间大于明天时间全部可用
                  $(value).removeClass('layui-disabled').css({
                    'pointer-events': ''
                  })
                } else if (inputTime < tomorrowTime) {
                  $(value).removeClass('layui-this')
                  if (Hours > 18) {
                    console.log('inputTime < tomorrowTime');
                    $(value).addClass('').addClass('layui-disabled').css({
                      'pointer-events': 'none',
                    })
                  } else if (params && Hours == params && text < Minutes) {
                    // 当选择当前小时且相等时,要做禁用准备
                    console.log('inputTime < tomorrowTime');
                    $(value).addClass('').addClass('layui-disabled').css({
                      'pointer-events': 'none',
                    })
                  } else if (params && params > Hours && text < Minutes) {
                    // 当天且时间再小时小时大于当前,要做去除禁用的准备
                    $(value).removeClass('layui-disabled').css({
                      'pointer-events': ''
                    })
                  }
    
                }
                console.log('bbLi', text);
              })
            }
    
            // 解决点击闪动的问题
            let aaScrollTop = $(aa).scrollTop()
            console.log(aaScrollTop);
            $(aa).on('click', 'li', function () {
              // 获取到点击的时间
              let curHours = $(this).text();
              circulateBB(curHours);
    
              // 解决闪动
              if ($(this).index() < 5) {
                $(this).parent().scrollTop(0)
              } else {
                $(this).parent().scrollTop($(aa).outerHeight())
              }
            })
    
            $(bb).on('click', 'li', function (e) {
              // 获取到aa激活的索引,运行上面的逻辑即可
              let activeAAIndex = $(aa).children('.layui-this').index();
              if (activeAAIndex < 6) {
                $(aa).scrollTop(0)
              } else {
                $(aa).scrollTop($(aa).outerHeight())
              }
            })
    
            circulateAA();
            circulateBB();
          }
    
    
    
    
    
          //获取cookie
          var $userName = unescape(getCookies('name'));
    
          function getCookies(name) {
            var cookies = document.cookie; //获取当前浏览器的所有cookie
            var cookieArr = cookies.replace(/\s+/g, '').split(';');
            var obj = {};
            for (var i = 0; i < cookieArr.length; i++) {
              var simple = cookieArr[i].split('=');
              obj[simple[0]] = simple[1];
            };
            return obj[name]
          };
    
          $('#userName').val($userName);
        })
      </script>
    </body>
    
    </html>

    展开全文
  • mintui 自定义选择时间段(picker)

    千次阅读 2019-03-06 18:16:27
    //自定义数据可以自己设定(暂时只提供年月选择和年月日选择) 图例: mockjs: constnowmonth=()=>{ letdate=newDate() letmonth=date.getMonth() returnmonth } constnowday=()=>{ letdate=...

    //自定义数据可以自己设定(暂时只提供年月选择和年月日选择)

     

     

    图例:

    mockjs:

    const nowmonth=()=>{

      let date = new Date()

      let month = date.getMonth()

      return month

    }

    const nowday=()=>{

      let date = new Date()

      let day = date.getDate()

      return day-1

    }

     

    const yearList=()=>{

      let date = new Date()

      let year = date.getFullYear()

      let resarr = []

      for(let i=year;i>year-20;i--){

        resarr.push(i+"年")

      }

      return resarr

    }

    const method={

     

    slotsday:

     

    [

     

    {

     

    flex: 1,

     

    values: yearList(),

     

    className: 'year',

     

    textAlign: 'left'

     

    }, {

     

    flex: 1,

     

    defaultIndex:nowmonth(),

     

    values: ['1月', '2月', '3月', '4月', '5月','6月','7月','8月','9月','10月','11月','12月'],

     

    className: 'mouth',

     

    textAlign: 'mid'

     

    }, {

     

    flex: 1,

     

    defaultIndex:nowday(),

     

    values: ["1日", "2日", "3日", "4日", "5日", "6日", "7日", "8日", "9日", "10日", "11日", "12日", "13日", "14日", "15日", "16日", "17日", "18日", "19日", "20日", "21日", "22日", "23日", "24日", "25日", "26日", "27日", "28日", "29日", "30日"],

     

    className: 'day',

     

    textAlign: 'right'

     

    }

     

    ],

     

    slotsmouth:

     

    [

     

    {

     

    flex: 1,

     

    values: ['2009年', '2010年', '2011年', '2012年', '2013年','2014年','2015年','2016年','2017年','2018年','2019年','2020年','2021年','2022年','2023年','2024年','2025年','2026年','2027年','2028年','2029年'],

     

    className: 'year',

     

    textAlign: 'left'

     

    }, {

     

    flex: 1,

     

    values: ['1月', '2月', '3月', '4月', '5月','6月','7月','8月','9月','10月','11月','12月'],

     

    className: 'mouth',

     

    textAlign: 'mid'

     

    }

     

    ]

     

    }

     

    export default method

     

    //封装的模块

    picker:

    <template>

    <div id="pickerTime">

    <div v-show="showtime">

    <div class="shadow" @click="hide"></div>

    <div class="datatime" >

    <div class="sure">

    <div @click="unsure">取消</div>

    <div @click="sure">确认</div>

    </div>

    <mt-picker class="onepick" @change="onValuesChange1" :slots="slots" :visible-item-count="3"></mt-picker>

    <mt-picker class="twopick" @change="onValuesChange2" :slots="slots" :visible-item-count="3"></mt-picker>

    </div>

    </div>

    </div>

    </template>

    <script>

    import { Toast } from 'mint-ui'

    import demo from "@/utils/demo.js"

    const slotsday = demo.slotsday

    const slotsmouth = demo.slotsmouth

    console.log(slotsday)

    console.log(slotsmouth)

    export default {

    name:'pickerTime',

    props:["status","mouthorday"],

    data(){

    return{

    slotsday:slotsday,

    showtime:false,

    changeDate:{

    startTime:["2009年","1月","1日"],

    finishTime:["2009年","1月","1日"]

    },

    slots:[]

    }

    },

    mounted(){

    if(this.mouthorday == "mouth"){

    this.slots = slotsmouth

    }else{

    this.slots = slotsday

    }

    },

    watch:{

    status(){

    this.showtime = !this.showtime

    }

    },

    methods:{

    hide(){

    this.showtime = false

    },

    unsure(){

    this.showtime = false

    },

    sure(){

    if(this.mouthorday == "mouth"){

    //判断时间段选择是否正确

    let myyear1 = this.changeDate.startTime[0].slice(0,4)

    let myyear2 = this.changeDate.finishTime[0].slice(0,4)

    let mymouth1 = this.changeDate.startTime[1].slice(0,this.changeDate.startTime[1].length-1)

    let mymouth2 = this.changeDate.finishTime[1].slice(0,this.changeDate.finishTime[1].length-1)

    if(myyear1>myyear2){

    toast("请选择正确的时间段")

    return

    }

    if(myyear1 == myyear2 && mymouth1>mymouth2){

    Toast("请选择正确的时间段")

    return

    }

    }else{

    //判断时间段选择是否正确

    console.log(this.changeDate)

    let myyear1 = this.changeDate.startTime[0].slice(0,4)

    let myyear2 = this.changeDate.finishTime[0].slice(0,4)

    let mymouth1 = this.changeDate.startTime[1].slice(0,this.changeDate.startTime[1].length-1)

    let mymouth2 = this.changeDate.finishTime[1].slice(0,this.changeDate.finishTime[1].length-1)

    let myday1 = this.changeDate.startTime[2].slice(0,this.changeDate.startTime[2].length-1)

    let myday2 = this.changeDate.finishTime[2].slice(0,this.changeDate.finishTime[2].length-1)

    if(myyear1>myyear2){

    Toast("请选择正确的时间段")

    return

    }

    if(myyear1 == myyear2 && mymouth1>mymouth2){

    Toast("请选择正确的时间段")

    return

    }

    if(myyear1 == myyear2 && mymouth1 == mymouth2 && myday1>myday2){

    Toast("请选择正确的时间段")

    return

    }

    }

     

    this.showtime = false

    this.$emit('childArr', this.changeDate)

    },

    onValuesChange1(picker,values){

    if(values.length){

    this.changeDate.startTime = values

    }

    },

    onValuesChange2(picker,values){

    if(values.length){

    this.changeDate.finishTime = values

    }

    },

    }

    }

    </script>

    <style>

    #pickerTime .onepick{

    position: absolute;

    top: 0.7rem;

    width: 100%;

    background: #fff;

    }

    #pickerTime .twopick{

    position: absolute;

    top: 2.7rem;

    width: 100%;

    background: #fff;

    }

    #pickerTime .picker-item{

    text-align:center;

    opacity: 0.3;

    transform: rotateX(50deg)

    }

    #pickerTime .picker-item.picker-selected{

    opacity: 1;

    transform: rotateX(0deg)

    }

    #pickerTime .datatime{

    height:4.7rem;

    position: fixed;;

    bottom:0;

    width:100%;

    left:0;

    z-index:667;

    }

    #pickerTime .sure{

    height:0.7rem;

    width:100%;

    padding:0 0.32rem;

    display:flex;

    justify-content: space-between;

    align-items: center;

    font-size:0.26rem;

    background:#fff;

    box-sizing: border-box;

    color:rgba(76,84,93,1);

    text-align:left;

    line-height:0.5rem;

    }

    #pickerTime .sure>div{

    height:100%;

    width:30%;

    line-height:0.7rem;

    }

    #pickerTime .sure>div:nth-of-type(2){

    color:rgba(0,175,213,1);

    text-align:right;

    }

    #pickerTime .shadow{

    height:100vh;

    width:100%;

    background:rgba(0,0,0,0.2);

    position:fixed;

    top:0;

    left:0;

    z-index:666;

    }

    </style>

     

     

    引入和使用

    status代表是否显示  主页面的默认值是false  点击某个按钮触发  this.status = !this.status

    changeDate代表这个组件返回过来值的接受参数

    changeDate(val){

        console.log(val)//val是选择完后传过来的值  分为开始时间和结束时间   需要自己处理

    }

    如果changeDate这个方法重复可能会报错  自行换名字

     

    这次更新新加了默认时间和当前日期一样(限制   现在年份固定到今年)

     

    效果图:

     

    展开全文
  • NumberPicker自定义时间选择

    千次阅读 2015-06-04 09:25:07
    这两天,项目需求中需要选择时间的功能,主要的需求如下: 1. 显示的时间自定义的,比如 不是顺序的1,2,3,4,5,6,7,8,9, 而是 3,4,6,9 2. 显示的时间内容是 几号,几时,几分 3. 要用Android的原生风格 ...

    这两天,项目需求中需要一个选择时间的功能,主要的需求如下:

    1. 显示的时间是自定义的,比如 不是顺序的1,2,3,4,5,6,7,8,9, 而是 3,4,6,9
    2. 显示的时间内容是  几号,几时,几分
    3. 要用Android的原生风格

    看到这个需求后,首先想到的是TimePicker,但是发现,TimePicker显示的时间只能是 小时分钟,显示不了日期,而且显示的内容无法自定义。

    所以的考虑通过反射,自定义TimePicker,但是发现显示的时间内容很难自定义,无法设置为 3,4,6,9这周时间段。

    但是在查看源代码时候发现使用到一个组件叫 NumberPicker,选择的时间的功能主要是通过NumberPicker实现的。


    于是开始百度NumberPicker,发现他是在Android3.0推出的组件,主要用于进行 选择的。看到这个我非常高兴,因为可以通过他实现我的功能。


    但是,NumberPicker不能向下兼容,最低API 11。   : (  


    于是,上GitHub上找下,看有木有人实现向下兼容的 NumberPicker,结果发现了

    https://github.com/SimonVT/android-numberpicker

    这是一个基于 Android 4.2 NumberPicker的移植。

    所以就采用他了

    使用非常简单


    NumberPicker valuepicker = (NumberPicker) findViewById(R.id.valuepicker);
        String[] city = {"立水桥","霍营","回龙观","龙泽","西二旗","上地"};
        valuepicker.setDisplayedValues(city);
        valuepicker.setMinValue(0);
        valuepicker.setMaxValue(city.length - 1);
        valuepicker.setValue(4);

    效果如下:



    注意:  需要加上样式才可以

        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
           
        <item name="numberPickerStyle">@style/NPWidget.Holo.NumberPicker</item>
    
    
        </style>








       

    展开全文
  • 预约时间 需求:把可选范围定在 当前时间...没有直接自定义控件 把两者结合到个视图上去 在限定时间范围的时候 日期是好控制的 datepickerdialog 可以直接获得datepicker 通过datepicker来 setMinDate 和

     预约时间

    需求:把可选范围定在 当前时间往后8小时 到 7天后的时间 精确到分

    用到了 datepickerdialog 和 自定义的Timepickerdialog

    没有直接自定义控件 把两者结合到一个视图上去


    在限定时间范围的时候

    日期是好控制的

    datepickerdialog 可以直接获得datepicker

    通过datepicker来 setMinDate 和  setMaxDate


    但是Timepickerdialog就难弄了,里面没有可以直接设置的方法

    所以这里就要自定义TimePickerDialog了


    public class RangeTimePickerDialog extends TimePickerDialog {


    private int minHour = -1;
    private int minMinute = -1;


    private int maxHour = 25;
    private int maxMinute = 25;


    private int currentHour = 0;
    private int currentMinute = 0;


    private Calendar calendar = Calendar.getInstance();
    private DateFormat dateFormat;




    public RangeTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {
        super(context, callBack, hourOfDay, minute, is24HourView);
        currentHour = hourOfDay;
        currentMinute = minute;
        dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);


        try {
            Class<?> superclass = getClass().getSuperclass();
            Field mTimePickerField = superclass.getDeclaredField("mTimePicker");
            mTimePickerField.setAccessible(true);
            TimePicker mTimePicker = (TimePicker) mTimePickerField.get(this);
            mTimePicker.setOnTimeChangedListener(this);
        } catch (NoSuchFieldException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalAccessException e) {
        }
    }
    public RangeTimePickerDialog(Context context,
            int theme,
            OnTimeSetListener callBack,
            int hourOfDay, int minute, boolean is24HourView) {
        super(context, theme,callBack, hourOfDay, minute, is24HourView);
        currentHour = hourOfDay;
        currentMinute = minute;
        dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);


        try {
            Class<?> superclass = getClass().getSuperclass();
            Field mTimePickerField = superclass.getDeclaredField("mTimePicker");
            mTimePickerField.setAccessible(true);
            TimePicker mTimePicker = (TimePicker) mTimePickerField.get(this);
            mTimePicker.setOnTimeChangedListener(this);
        } catch (NoSuchFieldException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalAccessException e) {
        }
    }


    public void setMin(int hour, int minute) {
        minHour = hour;
        minMinute = minute;
    }


    public void setMax(int hour, int minute) {
        maxHour = hour;
        maxMinute = minute;
    }


    @Override
    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {


        boolean validTime = true;
        if (hourOfDay < minHour || (hourOfDay == minHour && minute < minMinute)){
            validTime = false;
        }


        if (hourOfDay  > maxHour || (hourOfDay == maxHour && minute > maxMinute)){
            validTime = false;
        }


        if (validTime) {
            currentHour = hourOfDay;
            currentMinute = minute;
        }


        updateTime(currentHour, currentMinute);
        updateDialogTitle(view, currentHour, currentMinute);
    }


    private void updateDialogTitle(TimePicker timePicker, int hourOfDay, int minute) {
        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calendar.set(Calendar.MINUTE, minute);
        String title = dateFormat.format(calendar.getTime());
        setTitle(title);
    }
     }


    通过这段代码 我们就可以设置 一个 min  和一个max了


    剩下的就只是逻辑判断了 


    //创建DatePickerDialog对象
           DatePickerDialog dpd = new DatePickerDialog(HomeRepairAddActivity.this,AlertDialog.THEME_HOLO_LIGHT,Datelistener,year,month,day);
           
           DatePicker dp = dpd.getDatePicker();
           System.out.println("当前是:"+year+"年"+month+"月"+day+"日"+hour+"时"+min+"分");
           //通过判断hour+8小时后是否大于24来限定可选天数
           if(hour+8>=24)
           {
            //说明八小时后是第二天了,设置可选天数从第二天开始
            int newday = 1*24*60*60*1000;
            dp.setMinDate(mydate.getTime()+newday);
           }else
           {
            //没大于24小时,说明还是当天
            dp.setMinDate(mydate.getTime());
           }
           int newday = 7*24*60*60*1000;
           dp.setMaxDate(mydate.getTime()+newday);
           long se = mydate.getTime()+newday;
           dpd.setTitle("请设置报修日期");
                dpd.setOnDismissListener(new OnDismissListener() {

    @Override
    public void onDismiss(DialogInterface dialog) { 
    RangeTimePickerDialog tpd = new RangeTimePickerDialog(HomeRepairAddActivity.this,AlertDialog.THEME_HOLO_LIGHT, timelistener, FixedHour, min, true);
    tpd.setTitle("请设置预约报修时间");
    if(month>FixedMonth)
    {
    //如果选中的月份大于当前月份,就拿到当月最大天数 
    int Maxday= mycalendar.getActualMaximum(Calendar.DATE);

    day = day+Maxday;
    is=true;
    }
    System.out.println(day-FixedDay);
    if(day-FixedDay==7)
    {
    //说明是7天之后,是最大的预约时间, 设置 最大时间 为 当前时间
    tpd.setMax(hour, min);
    }else if(day-FixedDay<6 && day-FixedDay>1)
    {
    //说明是 在7天以内 可以让用户随意设置时间
    System.out.println("走这了");
    }
    else 
    {
    //说明是当天 判断+8小时是否超过24小时
    if(hour+8>=24) 
    {
    //超过了
    //判断新的小时是否大于当前小时
    int newHour = hour-16;
    if(newHour>FixedHour-16)
    {
    //超过了 分钟可以任意设置 小时下线限定为新的小时
    tpd.setMin(newHour, 60);
    tpd.setMax(24, 60);
    }else
    {
    //没超过 分钟的下线就是当前的分钟
    tpd.setMin(newHour, min);
    }
    }else
    {
    //没超过 就不让用户选择当前时间之前的时间了
    tpd.setMin(hour, min);
    }
    }
    tpd.setOnDismissListener(new OnDismissListener() {

    @Override
    public void onDismiss(DialogInterface dialog) {
    if(is)
    {
    Calendar calendar=Calendar.getInstance(Locale.CHINA);
    int Mday= calendar.getActualMaximum(Calendar.DATE);
    day = day-Mday;
    //设置文本框时间
    addtime.setText(year + "年" + (month + 1) + "月" + day+"日  "+hour+":"+min);
    }
    String Time_date = year+"-"+(month + 1)+"-"+day+" "+hour+":"+min;
    try {
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(Time_date);
    scheduledTime = date.getTime();
    } catch (Exception e) { 
    e.printStackTrace();
    }
    is=false;
    }
    });
    tpd.show();
    }
    });
                dpd.show();//显示DatePickerDialog组件
    }
    });
       }
    private TimePickerDialog.OnTimeSetListener timelistener = new OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    hour = hourOfDay;
    min = minute;

    addtime.setText(year + "年" + (month + 1) + "月" + day+"日  "+hour+":"+min);
    }
    };


    private DatePickerDialog.OnDateSetListener Datelistener = new DatePickerDialog.OnDateSetListener() {
    /**
    * params:view:该事件关联的组件 params:myyear:当前选择的年 params:monthOfYear:当前选择的月
    * params:dayOfMonth:当前选择的日
    */
    @Override
    public void onDateSet(DatePicker view, int myyear, int monthOfYear,
    int dayOfMonth) {
    // 修改year、month、day的变量值,以便以后单击按钮时,DatePickerDialog上显示上一次修改后的值
    year = myyear;
    month = monthOfYear;
    day = dayOfMonth;
    }

    };




    展开全文
  • 前几天因为个业务需求 需要实现个预约时间的效果 效果如下(ps.第次写小程序 如果写的不好地方还请大家多多指教) 微信小程序自带的picker 是没有这种效果的 实现的原理是基于picker mode的属性 利用多列...
  • 本文纯属蛋疼,实现一个可以拖动,选择需要播放的时间段,然后播放效果是只播放这一段选中的音乐。 需求:自定义一个Android播放器 可以随意选择需要播放音乐片段 返回选中播放部分的音乐数据 分析: MediaPlayer ...
  • 尽管Android给我们提供了时间选择控件DatePicker和TimePicker(它们的使用方法可以参考我的这篇文章Android之日期时间选择控件DatePicker和TimePicker),但无奈我的项目主色调是土豪金和高级黑,原生的控件用在里面...
  • Android自定义DataTimePicker(日期选择器)

    万次阅读 多人点赞 2014-08-23 15:39:05
    Android自定义DataTimePicker(日期选择器) 笔者有一段时间没有发表关于Android的文章了,关于Android自定义组件笔者有好几篇想跟大家分享的,后期会记录在博客中。本篇博客给大家分享的是自定义一个日期选择器,...
  • 1.默认状态(默认选择当前日期的时间段(蓝底背景色代表选中时间段), 2.当前日期之前的时间不可以选择(禁用了点击事件)) 3.当日历上的操作的年份月份小于当前时间的年份月份时禁止点击上月的按钮 选中状态 1....
  • ![图片说明](https://img-ask.csdn.net/upload/201709/30/1506753324_415347.png) ![图片说明]...求各位大神给个demo,取当前时间30分钟以后24小时以前
  • vscode自定义代码

    千次阅读 2018-02-02 21:12:19
     我们就可以自定义开发中常用的代码,节省时间,大大提高开发效率。(注意:创建哪种语言的代码片段就进相应语言的代码片段区域,写js代码就不要把代码写在了php的代码编写区) \r\n...
  • 例如:sqlserver '2017-01-02 02:02:21.287' 和 '2017-01-05 08:00:21.287' 两个数据。 我要获取这两个数据在08:00至20:00时间段中一共有多少小时。 求大牛帮忙
  • 前阵子app里需要用到日历... 就是写自定义日历的,但是看到具体的产品需求以及效果图,我就”嗯,很好……“,不是我不喜欢自定义,而是效果图里面的细节真的是有点多,好了,我们来看看细节: 1、产品需求只显示...
  • Android开发之自定义DataTimePicker(日期时间选择器)最近项目中,要求日期和时间在同个页面同时选择,这个就需要自定义了,其实所谓的自定义只不过是把时间和日期对话框组合在一起而已。、基本知识1、关于日期...
  • 自定义酒店日期选择

    千次阅读 2018-09-05 10:38:11
    自定义酒店日期选择自定义日期区间选择器,类似于途家等酒店、旅游日期区间选择器: 重写PopupWindow 制定区间日历 添加日历日期选中监听 *封装插件化 github开源 CustomDatePicker l类似于途家等酒店...
  • 代码块 <el-form-item label="开始日期" class="witchHalf" prop="startTime"> <el-date-picker v-model="form.startTime" ... placeholder="选择日期" :picker-options="pickerOptionsOne
  • 如果重复周期是 “只有次” 或者 “每天”,算法很好写,只要计算 当前时间 与 给定时间时间差就可以,如果 当前时间 给定时间,加上天就ok! 现在问题是:假设 我 自定义个重复周期,设定 每周三,...
  • 可是发现WPF只有个设置日期的DatePicker控件,没有设置时间的DateTimePicker控件。这样很不方便,所以就自己做了个,代码相对简洁,功能可以再做优化。另外考虑到扩展和UI体验,这里创建的是usercontrol。 先看...
  • 项目需求只选择年月,所以自己做了个很简单的。 默认时间段为1900 - 2099年,可自行调整。 Demo: https://github.com/AllenYL/YLDatePickerView
  • 自定义一个简单精美的时间轴控件

    千次阅读 2017-09-06 08:00:02
    今日科技快讯 ...近日,微信支付开启了新...目前腾讯正在进行白名单测试,并向部分客户推荐了零钱通,可以随时支付并享受收益。业内认为,零钱通将很快上线,并对近期不断降低限额的余额宝形成竞争。
  • 如何自定义一个通信协议

    万次阅读 多人点赞 2018-01-21 14:07:27
    借鉴简单的OSI和TCP/IP通信模型来讨论如何自定义一个适应自己的通信协议 前言 经典的OSI七层模型 1TCPIP模型解析 11整体介绍 22数据链路层 23网络层 24传输层 25应用层 不同类型的通信方式的总结 1从上述模型...
  • 如何自定义一个Java注解?

    千次阅读 多人点赞 2020-07-29 23:31:28
    一般官方定义都给的晦涩难懂,其实我们简单理解一下,注解就是标注在类、方法、变量、参数上的种标签,你可以使用JDK内置的注解,也可以自定义注解,通常情况下我们都是使用自定义注解来完成自己的注解功能 ...
  • android自定义view,时间刻度尺,时间轴,视频轴

    千次阅读 热门讨论 2017-09-27 22:45:46
    TimeRuler ...时间轴、时间刻度尺 继承至TextureView,效率更高 已适配横竖屏 缩放功能(分钟、小时级别) ...时间轴中选择时间 实时设置当天时间 显示有效视频时间 超时(超过00:00:00,、23:59:59)自动处理 带拖动开
  • 这几天在看google原生CameraApp的代码,不得不说写的是真TM的复杂,特别是逻辑处理那块,关于google原生CameraApp这块后续可能会作为个新的系列来写,今天主要介绍我在网上看到的关于自定义View的实现!...
  • 在Java,net中时间类都有相应自定义时间格式,可以很方便的DateTime().ToString("yyyyMMdd ...但脚本时间类没有这个函数,可以随意定义事件格式,所在前一段时间里做项目自己扩展时间格式化函数,现在拿出与大家分享。
  • 在工作中遇到个这样的需求,要求自定义可选择的时间范围,通过使用antd官方... //startValue参数会打印出多个,为打开当前时间选择面板下所有的时间。这个参数是个moment类型的时间 if (!startValue || !endVal
  • 自定义搜索功能 bootstrap-table是自带搜索功能的,但是搜索功能比较单一,如果我们有特殊的要求,那么需要自己写个搜索功能,主要是应用于进行数据库查询,并将结果展示。 大致流程为: 1、利用bootstrap-table...
  • Android自定义view——滚动选择

    千次阅读 2016-03-10 16:40:30
    首先介绍android....例如,在响应个滑动手势时,Scroller会帮你计算 滚动偏移量,你可以根据获取的偏移量来设置你的view的位置,从而实现滚动效果。 主要方法有: startScroll(int startX, int startY, int dx,
  • 在 nowtime 行 输入 date("yyyy-MM-dd HH:mm:ss") 或者 data() 等你要的格式化效果 勾选 skip if define 点 ok 选中 reformat according to style (会根据你输入的位置智能缩进) (No applicable contexts ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 452,912
精华内容 181,164
关键字:

自定义一段时间选择