一个日期型选择控件,设置时开始和结束时间,在使用期间发现在IOS端有时会有时间段不起作用的情况
<view style="">
<picker mode="date" value="{{datestart}}" name="GiveDate" start="{{datestart}}" end="{{enddate}}" bindchange="bindDateChange">
<view class='nocoupon'>预定</view>
</picker>
</view>
经过测试发现 :
如果今天new Date()是 2021-01-28
onLoad: function (options) {
var that = this;
var d = new Date();
var ed = new Date();
that.setData({
datestart: d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate(), //选择配送日期的开始时间 现在为当天
enddate: ed.getFullYear() + "-" + (ed.getMonth() + 1) + "-" + (ed.getDate() + 3), //选择配送日期的结束时间 现在为3天后 })
}
经过上面的计算,取5天后的日期,结束时间 enddate 会是 2021-01-33
这个时间在安卓端picker控件的时间段一样会正常显示。 但是在IOS端 就无效了。
IOS端 安卓端
所以自己写个函数把:()
function getDateSt(today, addDayCount,showtype='datetime') { //返回需要的几天后的日期
var date;
if (today) {
date = new Date(today);
} else {
date = new Date();
}
date.setDate(date.getDate() + addDayCount);//获取AddDayCount天后的日期
var year = date.getFullYear();
var month = date.getMonth() + 1;//获取当前月份的日期
var day = date.getDate();
var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds()
if(showtype=='date')
return [year, month, day].map(formatNumber).join('-')
else
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
//return y + "-" + m + "-" + d;
},
测试了下没问题了!希望有问题的朋友早日出坑。(找了2天呀,各种测试)
一种思路是将日期转化成时间戳后再进行计算,更推荐使用像dayjs这样的第三方库来处理时间问题。