當需要在前端去判斷一天只能點擊一次,第二天0點重置的時候,該如何去解決呢?
一、首先你需要獲取第二天0點的時間,目前我的方法有兩種
1.原生
var time= new Date(); time.setDate(t.getDate() + 1); time.setHours(0); time.setMinutes(0); time.setSeconds(0); console.log(t.getTime()) //第二天0點以毫秒為單位的時間
2.引入moment.js
var t = moment().format('x')//當前點擊時間 var nextDate = moment().add(1, 'days').hours(0).minutes(0).seconds(0).format('x')//新一天的時間
二、使用localStorage或者cookie去存儲一些數據設置過期時間為(第二天0點的時間 - 第一次點擊的時間)
這里我用到的是localStorage,由於localStorage原型上自帶的屬性方法里沒有設置過期時間,需要自己封裝兩個方法用來存和取
Storage.prototype.setExpire = (key, value, expire) => { //設置存 let obj = { data: value, //要存的信息 time: moment().format('x'), //第一次的點擊時間 expire: expire //過期時間 }; localStorage.setItem(key, JSON.stringify(obj)); //以字符串的形式存到localStorage中 } Storage.prototype.getExpire = key => { //設置取 let val = localStorage.getItem(key); //取 if (!val) { return val; } val = JSON.parse(val); //將字符串轉化成對象 if (moment().format('x')-val.time > val.expire) { //如果當前時間 - 第一次的時間 > 過期時間 clearInterval(begin) //清定時器 localStorage.removeItem(key); //移除localStorage /* 還可以去改變一些狀態值的true或false */ return null; //返回空 }else{ /* 還可以去改變一些狀態值的true或false */ return val.data; //返回存的值 } } localStorage.setExpire("token", '*********',nextDate-t) //存 var begin =window.setInterval(()=>{ //取 localStorage.getExpire("token") //每一秒獲取一次localStorage },1000) }
注意:前端去控制一天只能點擊一次第二天0點刷新,簽到的問題是很不好完善的,因為localStorage你可以從瀏覽器中刪掉,存儲的按鈕狀態或者其他的信息就沒了,你又可以重新操作了,最好的方法還是后端去判斷,然后返給你一個狀態,你根據狀態去判斷按鈕的狀態