微信小程序中设置搜索条件开始日期结束日期之间的时间差始终为31天,不论选择哪个都改变另一个的日期值保持与改变的日期之间相差31天

文章介绍了JavaScript中用于日期处理的rqformat.js库,包含两个函数getUnixTime用于转换日期到时间戳,dateCompare用于计算两个日期之间的天数差。在WXML和JS文件中展示了如何使用这些函数在日期选择器组件中进行日期范围限制。
摘要由CSDN通过智能技术生成
首先需要两个工具函数 ,文件名:rqformat.js

// 日期转时间戳
const getUnixTime = (dateStr) => {
	// let newstr = dateStr.replace(/-/g, '/')
	let date = new Date(dateStr)
	let time_str = date.getTime().toString()
	return time_str.substring(0, 10)
}


// 判断两个日期时间戳相差多少天,参数为时间戳
const dateCompare = (dateTimeStamp1, dateTimeStamp2) => {
	let dayNum = 0
	let date1 = Number(dateTimeStamp1)
	let date2 = Number(dateTimeStamp2)
	if (date1 > date2) {
		dayNum = Math.floor((date1 - date2) / 86400)
	} else {
		dayNum = Math.floor((date2 - date1) / 86400)
	}
	return dayNum
}

module.exports = {
    getUnixTime: getUnixTime,
	dateCompare: dateCompare
}
页面样式 也就是wxml文件
<view class="pick_condition" style="height:48px;">
	<view class="text1">开始日期:</view>
	<picker class="pick" mode="date" start="1900-01-01" value="{{startDate}}" end="2100-01-01" 
bindchange="bindStartDate">
		<view class="pick_text">{{startDate}}</view>
	</picker>
	<view class="right-icon">></view>
</view>
<view class="pick_condition" style="height:48px;">
	<view class="text1">结束日期:</view>
	<picker class="pick" mode="date" start="1900-01-01" value="{{endDate}}" end="2100-01-01" 
bindchange="bindEndDate">
		<view class="pick_text">{{endDate}}</view>
	</picker>
	<view class="right-icon">></view>
</view>
对应的js文件
bindStartDate(e) {
	var startDateUnix = rqformat.getUnixTime(e.detail.value)
	var endDateUnix = rqformat.getUnixTime(this.data.endDate)
	var diffInDays = rqformat.dateCompare(startDateUnix, endDateUnix)
	console.log(diffInDays)
	// 判断天数差并调整  
	if (diffInDays > 31) {
		var endDate = new Date(this.data.endDate)
		if (Number(endDateUnix) > Number(startDateUnix)) {
			endDate.setDate(endDate.getDate() - diffInDays + 31);
		} else {
			endDate.setDate(endDate.getDate() + diffInDays + 31);
		}
		var adjustedEndDateStr = endDate.toISOString().split('T')[0];
		this.setData({
			endDate: adjustedEndDateStr,
			startDate: e.detail.value
		})
	} else {
		this.setData({
			endDate: this.data.endDate,
			startDate: e.detail.value
		})
	}
},
bindEndDate(e) {
	var startDateUnix = rqformat.getUnixTime(this.data.startDate)
	var endDateUnix = rqformat.getUnixTime(e.detail.value)
	// 时间差
	var diffInDays = rqformat.dateCompare(startDateUnix, endDateUnix)
	console.log(diffInDays)
	// 判断天数差并调整  
	if (diffInDays > 31) {
		var startDate = new Date(this.data.startDate)
		if (Number(endDateUnix) > Number(startDateUnix)) {
			startDate.setDate(startDate.getDate() + diffInDays - 31);
			var adjustedStartDateStr = startDate.toISOString().split('T')[0];
		} else {
			startDate.setDate(startDate.getDate() - diffInDays - 31);
			var adjustedStartDateStr = startDate.toISOString().split('T')[0];
		}
		this.setData({
			startDate: adjustedStartDateStr,
			endDate: e.detail.value
		})
	} else {
		this.setData({
			startDate: this.data.startDate,
			endDate: e.detail.value
		})
	}
},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值