方法一:
一天执行一次,很常用的场景,思路就是利用一个标识,今天没有这个标识就执行操作,然后添加标识,后续判断标识存在就不再执行相应的操作。具体实现是添加一个cookie,第一次没有这个cookie,就执行操作,同时添加一个到第二天凌晨过期的cookie。
代码如下:
function DoOne(key,method) {
var v = getCookie(key);
if (!v) {
method("do something");
//获取第二天凌晨到当前时间的秒数
var tim_sec = 24 * 60 * 60 - (new Date().getHours() * 60 * 60 + new Date().getMinutes() * 60 + new Date().getSeconds());
setCookie(key, "1", tim_sec);
}
}
function dosome(msg){
console.log(msg);
}
//写cookies
function setCookie(name, value, second) {
if (!second) {
second = 7 * 24 * 60 * 60;//默认7天
}
var exp = new Date();
exp.setTime(exp.getTime() + second * 1000);
document.cookie = name + "=" + encodeURI(value) + ";expires=" + exp.toGMTString() + ";path=/";
}
//读取cookies
function getCookie(name) {
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(name + "=");//获取字符串的起点
if (c_start != -1) {
c_start = c_start + name.length + 1;//获取值的起点
c_end = document.cookie.indexOf(";", c_start);//获取结尾处
if (c_end == -1) c_end = document.cookie.length;//如果是最后一个,结尾就是cookie字符串的结尾
return decodeURI(document.cookie.substring(c_start, c_end));//截取字符串返回
}
}
return "";
}
调用:
DoOne("key", dosome);
结果,每天第一次打开这个页面时都会输出
方法二:
/**
* 定时页面刷新程序bai
* 实现du在每天指定时间刷新网页
* 请注意:由于本程序使用cookie设置zhi了一个小时之内只允许刷新一次的限定,调试的时候试验一次后
* 请删除cookie后再试第二次,否则一个小时之内将不再重复刷新
**/
var pT = 10; //时间精确点,以该数字表示的秒数进行巡检,时间越小,越精确,最小不要小于1,最大不要大于30
var h = 9; //小时数,(24小时制)
var m = 0; //分钟数,加上这个为了方便你调试,使用时可设置为0
setInterval(function(){
var d = new Date();
if(Number(d.getHours()) == h && Number(d.getMinutes()) == m && getCookie("reloadTime") != "hasReload"){
location.reload(true);
setCookie("reloadTime", "hasReload", 1);
}
}, 1000 * pT)
function getCookie(cookieName){
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(cookieName==arr[0]) return unescape(arr[1]);
}
return false;
}
function setCookie(cookieName, cValue, cExpires, cPath, cDomain, secure){//cExpires为过期的小时数
if(cExpires){
var date=new Date();
cExpires = date.setTime(date.getTime()+Number(cExpires)*3600*1000);
cExpires = date.toGMTString();
}
document.cookie = cookieName + "=" + escape(cValue) +
((cExpires) ? "; expires=" + cExpires : "") +
((cPath) ? "; path=" + cPath : "; path=/") +
((cDomain) ? "; domain=" + cDomain : "") +
((secure) ? "; secure" : "");
}
注意:程序中使用cookie来限定每天在设置的时间中内刷新一次,而不重复刷新,所以你调试的时候第一次可能好用,到了第二次(当然是在一个小时内的第二次)调试就不会有反应,这是为了防止你的“精确时间”设置的小,在这一分钟的时间里不断地重复刷新而设置的!