这个功能只显示下午14:00到次日06:00的时间段,当上午点击时间选择器时候,选择器的列表默认从14:00开始到次日06:00的时间段,当下午点击时间选择器时候,选择器的列表默认从当前时间开始到次日06:00的时间段,
效果图:
1,布局
2,js逻辑
/** 生命周期函数--监听页面显示 */
onShow: function () {
this.obtainTime();
},
/** 获取到达酒店的时间段 */
obtainTime(){
let hour = getToDay().date;
let hou = hour.getHours();
if(hou < 14){
let list = ['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00','次日 00:00','次日 01:00','次日 02:00','次日 03:00','次日 04:00','次日 05:00','次日 06:00'];
this.setData({
timeSelection:list
});
}else{
let list = [];
// for循环的3个条件可以省略,没有退出循环的判断条件,就必须使用break语句退出循环,否则就是死循环:
for(; ;) {
hour.setHours(hour.getHours() + 1);
let hh = hour.getHours();
if(hh == 7){
break; // 通过if判断来退出循环
}
if (hh < 10) hh = '次日 0' + hh +':00';
if (hh > 10) hh = hh +':00';
list.push(hh)
}
this.setData({
timeSelection:list
});
}
},
/** 预计到店时间显示 */
bindTimeChange(e){
this.setData({
index2:e.detail.value
})
}
3,年月日时分秒的封装
/** 将日期格式拆分 */
export function formatTime(date) {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day ,hour, minute, second].map(formatNumber)
}
/** 截取日期 */
export function formatDate( time_ , format_ ) {
const date = time_.split(" ");
const dateArr = date[0].split("-");
const timeArr = date[1].split(":");
switch (format_) {
case 'yy-mm':
return `${ dateArr[0] }-${ dateArr[1] }`
break;
case 'yy-mm-dd':
return `${ dateArr[0] }-${ dateArr[1] }-${ dateArr[2] }`
break;
case 'yy-mm-dd hh:mm':
return `${ dateArr[0] }-${ dateArr[1] }-${ dateArr[2] } ${ timeArr[0] }:${ timeArr[1] }`
break;
default: return false; break;
}
}
/** 将时间差转成hh:mm格式 */
export function calculateTime( s_ , e_ , format) {
let s_times = new Date(s_.replace(/-/g,'/').replace(/-/g,'/')).getTime();
let e_times = new Date(e_.replace(/-/g,'/').replace(/-/g,'/')).getTime();
let durs = ( e_times - s_times );
let hour = durs/1000/60/60;
hour = Math.floor(hour);
let minute = Math.floor((durs - hour*1000*60*60)/1000/60);
let second = Math.floor((durs - hour*1000*60*60 - minute*1000*60)/1000);
return [hour,minute,second].map(formatNumber)
}
// 格式化
function formatNumber(n) {
n = n.toString()
return n.length >= 2 ? n : '0' + n
}
/** 获取今天日期 */
export function getToDay() {
let date = new Date();
let y = date.getFullYear();
let m = date.getMonth() + 1;
let d = date.getDate();
let hh = date.getHours();
let mm = date.getMinutes();
let ss = date.getSeconds();
date.setDate(date.getDate() + 1); //未来的天数 1代表明天,2,3,4,5代表着未来的几天
let yyy = date.getFullYear();
let mmm = date.getMonth() + 1;
let ddd = date.getDate();
let today = `${ y }-${ formatNumber(m) }-${ formatNumber(d) }`; //年月日
let currentDate = `${ y }-${ formatNumber(m) }-${ formatNumber(d) }`; //当前日期
let future = `${ yyy }-${ formatNumber(mmm) }-${ formatNumber(ddd) }`; //未来的日期
let n = today + ` ${ formatNumber(hh) }:${ formatNumber(mm) }:${ formatNumber(ss) }`; //当前时间
return {
date,
y,
m,
d,
currentDate,
future,
today,
hh,
mm,
n
}
}