uni-datetime-picker在uni-app微信小程序中使用范围选择模式设置了end后在ios手机上回调的日期有问题
uni-datetime-picker在uni-app微信小程序中使用范围选择模式设置了end后在ios手机上回调的日期有问题
示例代码:
<uni-datetime-picker :isTime="false" @change="change" ref="datetimePicker" :value="value" type="daterange" end="2025-02-12"
rangeSeparator="至" />
操作步骤:
- end参数设置了2025-02-12,在选择器中选择 2025-02-04 - 2025-02-06
预期结果:
- 返回的数据应为:2025-02-04 - 2025-02-06
实际结果:
- 实际返回的是:2025-02-12 - 2025-02-12
bug描述:
uni-datetime-picker在微信小程序中使用范围选择模式,设置了end后,在ios手机上回调的日期只显示当天的,
举例:end参数设置了2025-02-12,在选择器中选择了 2025-02-04 - 2025-02-06,返回的数据是2025-02-12 - 2025-02-12
经过分析,问题出在了 uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue文件的confirmRangeChange函数中,在该函数中的if判断中,
${this.tempRange.startDate} ${this.tempRange.startTime}
,尾部有空字符串,导致ios识别错误
项目属性 | 值 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | windows 10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.45 |
第三方开发者工具版本号 | 1.06.2412050 Stable |
基础库版本号 | 3.7.6 |
项目创建方式 | HBuilderX |
更多关于uni-datetime-picker在uni-app微信小程序中使用范围选择模式设置了end后在ios手机上回调的日期有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好,我这里测试着没有复现这个问题,你能给一下完整的测试代码吗?
更多关于uni-datetime-picker在uni-app微信小程序中使用范围选择模式设置了end后在ios手机上回调的日期有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
代码放到下方评论区了,使用ios设备运行到小程序就可以复现
</view>
<view class="item-box">
<view class="">
<text v-if="value[1]" style="color: #000;">{{value[1]}}</text>
<text v-else>选择结束日期</text>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="example-body " style="top: -100%;position: absolute;">
<uni-datetime-picker :isTime="false" @change="change" ref="datetimePicker" :value="value" type="daterange" :end="startBefore"
rangeSeparator="至" />
</view>
</view>
</template>
<script>
export default {
data() {
return {
value: [],
startBefore: new Date().getTime(),
};
},
onReady() {},
methods: {
hourChange(e){
this.value = e;
},
}
};
</script>
<style scoped lang="scss">
.input-box{
margin-top: 16rpx;
height: 76rpx;
background: #FAFAFA;
border-radius: 4rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 18rpx;
input{
width: 500rpx;
text-align: left;
}
.text{
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: var(--h7);
color: #222222;
line-height: 40rpx;
text-align: left;
font-style: normal;
}
}
.cont-box {
// height: 204rpx;
background: #FFFFFF;
border-radius: 20rpx;
.date-cont-box{
padding: 24rpx;
}
.date-cont {
display: flex;
align-items: center;
justify-content: space-between;
.wire-box {
width: 17rpx;
height: 1rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: var(--h7);
background: #666666;
line-height: 40rpx;
text-align: left;
font-style: normal;
}
.item-box {
width: 310rpx;
height: 76rpx;
background: #FAFAFA;
border-radius: 4rpx;
display: flex;
align-items: center;
justify-content: center;
view {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: var(--h7);
color: #AAAAAA;
line-height: 40rpx;
text-align: center;
font-style: normal;
}
image {
margin-right: 22rpx;
width: 32rpx;
height: 32rpx;
}
}
}
.btn-box {
display: flex;
align-items: center;
justify-content: center;
height: 80rpx;
background: #26A3FF;
border-radius: 0rpx 0rpx 20rpx 20rpx;
border: 2rpx solid #FFFFFF;
image {
margin-right: 8rpx;
width: 30rpx;
height: 30rpx;
}
.name {
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: var(--h7);
color: #FFFFFF;
line-height: 40rpx;
text-align: justify;
font-style: normal;
}
}
}
</style>最好用时间戳
回复 jgj_app:用时间戳也是一样的
回复 1***@qq.com: start 也设置下试试
你好,请问下是如何解决的呢?
这是一个已知的uni-datetime-picker组件在iOS设备上的兼容性问题。问题确实出在confirmRangeChange函数中对日期字符串的处理上。
在iOS系统中,当日期字符串尾部包含空格时,会导致日期解析异常。建议的临时解决方案是:
- 在组件的confirmRangeChange函数中,修改日期字符串拼接方式,确保去掉尾部空格:
`${this.tempRange.startDate}${this.tempRange.startTime ? ' '+this.tempRange.startTime : ''}`
- 或者可以在change事件回调中自行处理返回的日期值:
change(e) {
if (Array.isArray(e)) {
e = e.map(date => date.trim())
}
// 处理逻辑
}