picker-view、微信小程序自定义时间选择器(非官方)
<view class="baseList">
<view class="list clearfix">
<view class="fl listName"><text class="reqIcon">*</text> 参展时间</view>
<view class="listMain fr" bindtap="dateMainBtn">
<!-- <input class="rightInput" placeholder="请选择日期" name='startTime' value="{{timeInput}}"></input> -->
<view>{{timeInput == '' ? '选择时间' : timeInput}}</view>
</view>
<view class="propTimeBody" wx:if="{{propDate}}">
<view class="propTimeMain">
<view class="propTop clearfix">
<text class="fl noBtn" bindtap="noBtnTime">取消</text>
<text>{{year}}-{{month}}-{{day}} {{isDaytime ? "上午" : "下午"}}</text>
<text class="fr okBtn" bindtap="okBtnTime">确定</text>
</view>
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}" bindchange="bindChange">
<picker-view-column>
<view wx:for="{{years}}" wx:key="years" style="line-height: 50px; text-align: center;">{{item}}年</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{months}}" wx:key="months" style="line-height: 50px; text-align: center;">{{item}}月</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{days}}" wx:key="days" style="line-height: 50px; text-align: center;">{{item}}日</view>
</picker-view-column>
<picker-view-column>
<view class="icon-container" style="line-height: 50px; text-align: center;">
上午
</view>
<view class="icon-container" style="line-height: 50px; text-align: center;">
下午
</view>
</picker-view-column>
</picker-view>
</view>
</view>
</view>
</view>
.baseList{
padding: 40rpx 30rpx 20rpx;
}
.baseList .list{
font-size: 32rpx;
color: #333;
line-height: 80rpx;
margin-bottom: 20rpx;
}
.baseList .list .listName{
text-align: right;
width: 200rpx;
}
.baseList .list .listMain{
position: relative;
width: 470rpx;
padding: 0 20rpx;
text-align: left;
border: 1rpx solid #ddd;
border-radius: 16rpx;
line-height: 80rpx;
height: 80rpx;
}
.propTimeBody{
position: fixed;
left: 0;
top: 0;
z-index: 99;
height: 100%;
width: 100%;
background-color: rgba(0,0,0,.7);
}
.propTimeBody .propTimeMain{
background-color: #fff;
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 111;
}
.propTimeBody .propTimeMain .propTop{
text-align: center;
padding: 30rpx 20rpx;
font-size: 32rpx;
color: #333;
}
.propTimeBody .propTimeMain .propTop .noBtn{
color: #666;
}
.propTimeBody .propTimeMain .propTop .okBtn{
color: #0084ff;
}
const date = new Date();//获取系统日期
const years = []
const months = []
const days = []
const bigMonth = [1, 3, 5, 7, 8, 10, 12] //将日期分开写入对应数组 //年
var getYear = date.getFullYear()
var getMonth = date.getMonth()
var getDate = date.getDate()
for (let i = getYear - 20; i <= getYear + 20; i++) {
years.push(i);
} //月
for (let i = 1; i <= 12; i++) {
months.push(i);
} //日
for (let i = 1; i <= 31; i++) {
days.push(i);
}
years: years,
year: getYear,
months: months,
month: getMonth+1,
days: days,
day: getDate,
value: [20, getMonth, getDate-1],
isDaytime: true,
timeInput: '',
propDate: false,
dateMainBtn () {
let setYear = this.data.year;
let setMonth = this.data.month;
let setDay = this.data.day
let dateTimeBody = setYear + '-' + setMonth + '-' + setDay
let todays = this.data.isDaytime === true ? '上午' : '下午'
wx.setStorageSync('adminDate', dateTimeBody)
wx.setStorageSync('adminTodays', todays)
this.setData({
propDate: true
})
},
okBtnTime () {
this.setData({
propDate: false,
timeInput: wx.getStorageSync('adminDate') + wx.getStorageSync('adminTodays'),
})
},
noBtnTime () {
this.setData({
propDate: false
})
},
//判断元素是否在一个数组
contains: function (arr, obj) {
var i = arr.length;
while (i--) {
if (arr[i] === obj) {
return true;
}
}
return false;
},
setDays: function (day) {
const temp = [];
for (let i = 1; i <= day; i++) {
temp.push(i)
}
this.setData({
days: temp,
})
},
//选择滚动器改变触发事件
bindChange: function (e) {
const val = e.detail.value;
//判断月的天数
const setYear = this.data.years[val[0]];
const setMonth = this.data.months[val[1]];
const setDay = this.data.days[val[2]]
//console.log(setYear + '-' + setMonth + '-' + setDay);
//闰年
if (setMonth === 2) {
if (setYear % 4 === 0 && setYear % 100 !== 0) {
console.log('闰年')
this.setDays(29);
} else {
console.log('非闰年')
this.setDays(28);
}
} else {
//大月
if (this.contains(bigMonth, setMonth)) {
this.setDays(31)
} else {
this.setDays(30)
}
}
this.setData({
year: setYear,
month: setMonth,
day: setDay,
isDaytime: !val[3]
})
let dateTimeBody = setYear + '-' + setMonth + '-' + setDay
let todays = !val[3] === true ? '上午' : '下午'
wx.setStorageSync('adminDate', dateTimeBody)
wx.setStorageSync('adminTodays', todays)
},
picker-view、微信小程序自定义时间选择器(非官方)的更多相关文章
- 微信小程序----日期时间选择器(自定义精确到分秒或时段)
声明 bug:由于此篇博客是在bindcolumnchange事件中做的值的改变处理,因此会出现当你选择时,没有点击确定,直接取消返回后,会发现选择框的值依然改变.造成原因:这一点就是由于在bindc ...
- 微信小程序 自定义省市选择器
1.把省市数据放在city.js中,city.js放在until目录下 // city.js module.exports = { "province": [ { "ti ...
- 微信小程序日期时间选择器(精确到秒)
<picker mode="multiSelector" value="{{dateTime1}}" bindchange="changeDat ...
- 微信小程序自定义 tabbar
一定的需求情况下,无法使用小程序原生的 tabbar 的时候,需要自行实现一个和 tabbar 功能一模一样的自制组件. 查阅了海量的博客和文档之后,亲自踩坑.总结了三种在不使用微信小程序原生 tab ...
- 微信小程序自定义组件,提示组件
微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加“components”目录,然后像添加Page页面一样添加自定义组 ...
- 微信小程序——自定义导航栏
微信头部导航栏可能通过json配置: 但是有时候我们项目需求可能需要自定义头部导航栏,如下图所示: 现在具体说一下实现步骤及方法: 步骤: 1.在 app.json 里面把 "navigat ...
- 微信小程序自定义弹窗wcPop插件|仿微信弹窗样式
微信小程序自定义组件弹窗wcPop|小程序消息提示框|toast自定义模板弹窗 平时在开发小程序的时候,弹窗应用场景还是蛮广泛的,但是微信官方提供的弹窗比较有局限性,不能自定义修改.这个时候首先想到的 ...
- 微信小程序-自定义底部导航
代码地址如下:http://www.demodashi.com/demo/14258.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微信小程序自定义tabbar的实现
微信小程序自定义tabbar的实现 目的:当采用微信的自定义tabbar组件的时候,切换的时候会出现闪屏的效果:当使用微信默认的tabbar的时候,限制了tabbar的数量以及灵活配置. 方案:自己动 ...
随机推荐
- map处理:map(str,[1,2,3,4,5,6])
#map(s1,s2)传入两个参数,s1是对该Iterable每个参数做处理的参数,s2是该Iterable print(list(map(str,[1,2,3,4,5,6]))) #map()传入的 ...
- controlfile的情景恢复
控制文件测试 百度百科:控制文件(Control File)是Oracle的物理文件之一,它记录了数据库的名字.数据文件的位置等信息.控制文件的重要性在于,一旦控制文件损坏,数据库将会宕机.如果没有数 ...
- .NET Framework、.NET Core 和 .NET 5+ 的产品生命周期
本文整理记录了 .NET Framework..NET Core 和 .NET 各个版本的产品支持周期和操作系统兼容性. 早于 .NET Framework 2.0 和 .NET Core 2.1 的 ...
- ida 调试android之路
系统: Mac OSX 调试环境:IDA7.0, adb 手机环境:红米手机 android 4.4.4 前提条件: 红米手机root之路:https://www.cnblogs.com/dzqdz ...
- robot framework使用小结(四)
robot framework可以采用读excel表这种形式实现数据分离,本文没有实现批量读取excel表内容(还不会),后续有必要就学习哈再更新~~~ 新建测试案例baidu05, 右键项目名rob ...
- Sql sever 声明变量,赋值变量
语句: --声明变量DECLARE @idcard nvarchar () , @rowid nvarchar () --给变量赋值SELECT @idcard = '{0}', @rowid = ' ...
- igate(因特网网关)
网关:Gateway 又称网间连接器.协议转换器.-----复杂的网络互连设备. 网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连.网关既可以用于广域网互连,也可以 ...
- 收藏python开发各种资源官方文档
http://json.cn/ https://cn.bing.com/ https://processon.com/ https://docs.djangoproject.com/en/1.11/r ...
- 你真的了解CSS继承吗?看完必跪
也许你瞧不起以前的 css ,但是你不该再轻视眼下的 css .近年来 css 的变量系统已逐步得到各大浏览器厂商支持,自定义选择器等强势袭来,嵌套系统/模块系统也在路上…为了更好的掌握 css 这门 ...
- Spring Cloud系列教程第九篇-Eureka自我保护机制
Spring Cloud系列教程第九篇-Eureka自我保护机制 本文主要内容: 1:自我保护介绍 2:导致原因分析 3:怎么禁止自我保护 本文是由凯哥(凯哥Java:kagejava)发布的< ...