MediaWiki:Timer.js:修订间差异
外观
创建页面,内容为“→! * 如果再给我一次重新写的机会 * 我一定不会再写出如此春虫虫的代码 * BY:丩卩夂忄: TimerNumber=document.getElementsByClassName("TimerNumber") TimerNumbers=new Array() for(i=0;i<TimerNumber.length;i++){ TimerNumbers=TimerNumber[i].innerHTML } TimerNumber=Math.max(TimerNumbers) TimerZone=new Date().getTimezoneOffset()/60; TimerOffset=(8+TimerZone)*60*60*1000; Timers=new Array(); TimerEndTimes=new Array(); TimerPMrs=new Ar…” |
无编辑摘要 |
||
第1行: | 第1行: | ||
/* | /** 新计时器 | ||
-------------------- | |||
*** * 版本 | |||
*** ** JS程序版本:1.2 | |||
*** ** HTML&WIKI文本版本:1.0 | |||
-------------------- | |||
*** 使用说明 | |||
*** * .NewTimer[data-start=开始时间][data-end=结束时间][data-gmt=时区]:创建一个计时器 | |||
*** ** [data-start=开始时间]:必填,格式为"y/m/d h:m:s" | |||
*** ** [data-gmt=时区]:默认为"+8" | |||
*/ | |||
// 此处粘贴完整Timer.js代码 | |||
/** 新计时器 | |||
-------------------- | |||
*** * 版本 | |||
*** ** JS程序版本:1.2 | |||
*** ** HTML&WIKI文本版本:1.0 | |||
-------------------- | |||
*** 使用说明 | |||
*** * .NewTimer[data-start=开始时间][data-end=结束时间][data-gmt=时区]:创建一个计时器 | |||
*** ** [data-start=开始时间]:必填,设置计时器的开始时间,格式为"y/m/d h:m:s" | |||
*** ** [data-end=结束时间]:设置计时器的结束时间,格式为"y/m/d h:m:s" | |||
*** *** 如果没有设置结束时间,那么结束时间会被设置为开始时间 | |||
*** ** [data-gmt=时区]:设置计时器的时区,格式为"±gmt" | |||
*** *** 如果没有设置时区,那么时区默认为"+8" | |||
*** ** .NewTimer .displayTimer:创建计时器显示区域 | |||
*** ** .NewTimer .NotStart:设置计时器在还没开始时的显示格式 | |||
*** ** .NewTimer .StartButNotEnd:设置计时器在开始后但还没结束时的显示格式 | |||
*** ** .NewTimer .End:设置计时器在结束后的显示格式 | |||
*** 格式说明 | |||
*** * %syear:开始年 | |||
*** * %smonth:开始月(不补前导零) | |||
*** * %sMonth:开始月(补前导零) | |||
*** * %sdate:开始日(不补前导零) | |||
*** * %sDate:开始日(补前导零) | |||
*** * %shour:开始时(不补前导零) | |||
*** * %sHour:开始时(补前导零) | |||
*** * %smin:开始分(不补前导零) | |||
*** * %sMin:开始分(补前导零) | |||
*** * %ssec:开始秒(不补前导零) | |||
*** * %sSec:开始秒(补前导零) | |||
*** * %eyear:结束年 | |||
*** * %emonth:结束月(不补前导零) | |||
*** * %eMonth:结束月(补前导零) | |||
*** * %edate:结束日(不补前导零) | |||
*** * %eDate:结束日(补前导零) | |||
*** * %ehour:结束时(不补前导零) | |||
*** * %eHour:结束时(补前导零) | |||
*** * %emin:结束分(不补前导零) | |||
*** * %eMin:结束分(补前导零) | |||
*** * %esec:结束秒(不补前导零) | |||
*** * %eSec:结束秒(补前导零) | |||
*** * %nyear:现在年 | |||
*** * %nmonth:现在月(不补前导零) | |||
*** * %nMonth:现在月(补前导零) | |||
*** * %ndate:现在日(不补前导零) | |||
*** * %nDate:现在日(补前导零) | |||
*** * %nhour:现在时(不补前导零) | |||
*** * %nHour:现在时(补前导零) | |||
*** * %nmin:现在分(不补前导零) | |||
*** * %nMin:现在分(补前导零) | |||
*** * %nsec:现在秒(不补前导零) | |||
*** * %nSec:现在秒(补前导零) | |||
*** * ~sd:距离开始有几天 | |||
*** * ~sh:距离开始有几小时(在一天内) | |||
*** * ~sH:距离开始有几小时(总计) | |||
*** * ~sm:距离开始有几分钟(在一小时内) | |||
*** * ~sM:距离开始有几分钟(总计) | |||
*** * ~ss:距离开始有几秒钟(在一分钟内) | |||
*** * ~sS:距离开始有几秒钟(总计) | |||
} | *** * ~ed:距离结束有几天 | ||
function | *** * ~eh:距离结束有几小时(在一天内) | ||
*** * ~eH:距离结束有几小时(总计) | |||
*** * ~em:距离结束有几分钟(在一小时内) | |||
*** * ~eM:距离结束有几分钟(总计) | |||
*** * ~es:距离结束有几秒钟(在一分钟内) | |||
*** * ~eS:距离结束有几秒钟(总计) | |||
-------------------- | |||
*** 最后更新日期:2021.08.15 | |||
*** 制作者:丩卩夂忄 | |||
*/ | |||
NTFun={ | |||
"initialize":function(){ | |||
this.run() | |||
setInterval(function(){NTFun.run()},1000) | |||
}, | |||
"run":function(){ | |||
let timer=document.getElementsByClassName("NewTimer") | |||
for(let i=0,ilen=timer.length;i<ilen;i++){ | |||
let now=new Date(new Date().getTime()+new Date().getTimezoneOffset()*60000+8*3600000) | |||
let start=new Date(timer[i].dataset.start+" GMT"+(timer[i].dataset.gmt||"+8")) | |||
let end=new Date((timer[i].dataset.end||timer[i].dataset.start)+" GMT"+(timer[i].dataset.gmt||"+8")) | |||
let type | |||
if(now<start){ | |||
type="NotStart" | |||
} | |||
else if(now>end){ | |||
type="End" | |||
} | |||
else{ | |||
type="StartButNotEnd" | |||
} | |||
let format=timer[i].getElementsByClassName(type)[0].innerHTML | |||
timer[i].getElementsByClassName("displayTimer")[0].innerHTML=this.format(format,now,start,end) | |||
} | } | ||
}, | |||
"format":function(format,now,start,end){ | |||
let result=format | |||
result=result.replace(/%syear/g,start.getFullYear()) | |||
result=result.replace(/%smonth/g,start.getMonth()+1) | |||
result=result.replace(/%sMonth/g,this.leading0(start.getMonth()+1)) | |||
result=result.replace(/%sdate/g,start.getDate()) | |||
result=result.replace(/%sDate/g,this.leading0(start.getDate())) | |||
result=result.replace(/%shour/g,start.getHours()) | |||
result=result.replace(/%sHour/g,this.leading0(start.getHours())) | |||
result=result.replace(/%smin/g,start.getMinutes()) | |||
result=result.replace(/%sMin/g,this.leading0(start.getMinutes())) | |||
result=result.replace(/%ssec/g,start.getSeconds()) | |||
result=result.replace(/%sSec/g,this.leading0(start.getSeconds())) | |||
result=result.replace(/%eyear/g,end.getFullYear()) | |||
result=result.replace(/%emonth/g,end.getMonth()+1) | |||
result=result.replace(/%eMonth/g,this.leading0(end.getMonth()+1)) | |||
result=result.replace(/%edate/g,end.getDate()) | |||
result=result.replace(/%eDate/g,this.leading0(end.getDate())) | |||
result=result.replace(/%ehour/g,end.getHours()) | |||
result=result.replace(/%eHour/g,this.leading0(end.getHours())) | |||
result=result.replace(/%emin/g,end.getMinutes()) | |||
result=result.replace(/%eMin/g,this.leading0(end.getMinutes())) | |||
result=result.replace(/%esec/g,end.getSeconds()) | |||
result=result.replace(/%eSec/g,this.leading0(end.getSeconds())) | |||
result=result.replace(/%nyear/g,now.getFullYear()) | |||
result=result.replace(/%nmonth/g,now.getMonth()+1) | |||
result=result.replace(/%nMonth/g,this.leading0(now.getMonth()+1)) | |||
result=result.replace(/%ndate/g,now.getDate()) | |||
result=result.replace(/%nDate/g,this.leading0(now.getDate())) | |||
result=result.replace(/%nhour/g,now.getHours()) | |||
result=result.replace(/%nHour/g,this.leading0(now.getHours())) | |||
result=result.replace(/%nmin/g,now.getMinutes()) | |||
result=result.replace(/%nMin/g,this.leading0(now.getMinutes())) | |||
result=result.replace(/%nsec/g,now.getSeconds()) | |||
result=result.replace(/%nSec/g,this.leading0(now.getSeconds())) | |||
let n2s=Math.abs(now-start) | |||
result=result.replace(/~sd/g,Math.floor(n2s/1000/60/60/24)) | |||
result=result.replace(/~sh/g,Math.floor(n2s/1000/60/60)%24) | |||
result=result.replace(/~sH/g,Math.floor(n2s/1000/60/60)) | |||
result=result.replace(/~sm/g,Math.floor(n2s/1000/60)%60) | |||
result=result.replace(/~sM/g,Math.floor(n2s/1000/60)) | |||
result=result.replace(/~ss/g,Math.floor(n2s/1000)%60) | |||
result=result.replace(/~sS/g,Math.floor(n2s/1000)) | |||
let n2e=Math.abs(now-end) | |||
result=result.replace(/~ed/g,Math.floor(n2e/1000/60/60/24)) | |||
result=result.replace(/~eh/g,Math.floor(n2e/1000/60/60)%24) | |||
result=result.replace(/~eH/g,Math.floor(n2e/1000/60/60)) | |||
result=result.replace(/~em/g,Math.floor(n2e/1000/60)%60) | |||
result=result.replace(/~eM/g,Math.floor(n2e/1000/60)) | |||
result=result.replace(/~es/g,Math.floor(n2e/1000)%60) | |||
result=result.replace(/~eS/g,Math.floor(n2e/1000)) | |||
return result | |||
}, | |||
"leading0":function(num){ | |||
num+="" | |||
for(;num.length<2;){ | |||
num="0"+num | |||
} | } | ||
return num | |||
}, | |||
} | |||
try{ | |||
NTIsRun | |||
} | |||
catch(e){ | |||
NTIsRun=true | |||
if(document.readyState=="complete"){ | |||
NTFun.initialize() | |||
} | |||
else{ | |||
window.addEventListener("load",function(){ | |||
} | NTFun.initialize() | ||
} | }) | ||
} | |||
} |
2025年4月12日 (六) 02:25的最新版本
/** 新计时器
--------------------
*** * 版本
*** ** JS程序版本:1.2
*** ** HTML&WIKI文本版本:1.0
--------------------
*** 使用说明
*** * .NewTimer[data-start=开始时间][data-end=结束时间][data-gmt=时区]:创建一个计时器
*** ** [data-start=开始时间]:必填,格式为"y/m/d h:m:s"
*** ** [data-gmt=时区]:默认为"+8"
*/
// 此处粘贴完整Timer.js代码
/** 新计时器
--------------------
*** * 版本
*** ** JS程序版本:1.2
*** ** HTML&WIKI文本版本:1.0
--------------------
*** 使用说明
*** * .NewTimer[data-start=开始时间][data-end=结束时间][data-gmt=时区]:创建一个计时器
*** ** [data-start=开始时间]:必填,设置计时器的开始时间,格式为"y/m/d h:m:s"
*** ** [data-end=结束时间]:设置计时器的结束时间,格式为"y/m/d h:m:s"
*** *** 如果没有设置结束时间,那么结束时间会被设置为开始时间
*** ** [data-gmt=时区]:设置计时器的时区,格式为"±gmt"
*** *** 如果没有设置时区,那么时区默认为"+8"
*** ** .NewTimer .displayTimer:创建计时器显示区域
*** ** .NewTimer .NotStart:设置计时器在还没开始时的显示格式
*** ** .NewTimer .StartButNotEnd:设置计时器在开始后但还没结束时的显示格式
*** ** .NewTimer .End:设置计时器在结束后的显示格式
*** 格式说明
*** * %syear:开始年
*** * %smonth:开始月(不补前导零)
*** * %sMonth:开始月(补前导零)
*** * %sdate:开始日(不补前导零)
*** * %sDate:开始日(补前导零)
*** * %shour:开始时(不补前导零)
*** * %sHour:开始时(补前导零)
*** * %smin:开始分(不补前导零)
*** * %sMin:开始分(补前导零)
*** * %ssec:开始秒(不补前导零)
*** * %sSec:开始秒(补前导零)
*** * %eyear:结束年
*** * %emonth:结束月(不补前导零)
*** * %eMonth:结束月(补前导零)
*** * %edate:结束日(不补前导零)
*** * %eDate:结束日(补前导零)
*** * %ehour:结束时(不补前导零)
*** * %eHour:结束时(补前导零)
*** * %emin:结束分(不补前导零)
*** * %eMin:结束分(补前导零)
*** * %esec:结束秒(不补前导零)
*** * %eSec:结束秒(补前导零)
*** * %nyear:现在年
*** * %nmonth:现在月(不补前导零)
*** * %nMonth:现在月(补前导零)
*** * %ndate:现在日(不补前导零)
*** * %nDate:现在日(补前导零)
*** * %nhour:现在时(不补前导零)
*** * %nHour:现在时(补前导零)
*** * %nmin:现在分(不补前导零)
*** * %nMin:现在分(补前导零)
*** * %nsec:现在秒(不补前导零)
*** * %nSec:现在秒(补前导零)
*** * ~sd:距离开始有几天
*** * ~sh:距离开始有几小时(在一天内)
*** * ~sH:距离开始有几小时(总计)
*** * ~sm:距离开始有几分钟(在一小时内)
*** * ~sM:距离开始有几分钟(总计)
*** * ~ss:距离开始有几秒钟(在一分钟内)
*** * ~sS:距离开始有几秒钟(总计)
*** * ~ed:距离结束有几天
*** * ~eh:距离结束有几小时(在一天内)
*** * ~eH:距离结束有几小时(总计)
*** * ~em:距离结束有几分钟(在一小时内)
*** * ~eM:距离结束有几分钟(总计)
*** * ~es:距离结束有几秒钟(在一分钟内)
*** * ~eS:距离结束有几秒钟(总计)
--------------------
*** 最后更新日期:2021.08.15
*** 制作者:丩卩夂忄
*/
NTFun={
"initialize":function(){
this.run()
setInterval(function(){NTFun.run()},1000)
},
"run":function(){
let timer=document.getElementsByClassName("NewTimer")
for(let i=0,ilen=timer.length;i<ilen;i++){
let now=new Date(new Date().getTime()+new Date().getTimezoneOffset()*60000+8*3600000)
let start=new Date(timer[i].dataset.start+" GMT"+(timer[i].dataset.gmt||"+8"))
let end=new Date((timer[i].dataset.end||timer[i].dataset.start)+" GMT"+(timer[i].dataset.gmt||"+8"))
let type
if(now<start){
type="NotStart"
}
else if(now>end){
type="End"
}
else{
type="StartButNotEnd"
}
let format=timer[i].getElementsByClassName(type)[0].innerHTML
timer[i].getElementsByClassName("displayTimer")[0].innerHTML=this.format(format,now,start,end)
}
},
"format":function(format,now,start,end){
let result=format
result=result.replace(/%syear/g,start.getFullYear())
result=result.replace(/%smonth/g,start.getMonth()+1)
result=result.replace(/%sMonth/g,this.leading0(start.getMonth()+1))
result=result.replace(/%sdate/g,start.getDate())
result=result.replace(/%sDate/g,this.leading0(start.getDate()))
result=result.replace(/%shour/g,start.getHours())
result=result.replace(/%sHour/g,this.leading0(start.getHours()))
result=result.replace(/%smin/g,start.getMinutes())
result=result.replace(/%sMin/g,this.leading0(start.getMinutes()))
result=result.replace(/%ssec/g,start.getSeconds())
result=result.replace(/%sSec/g,this.leading0(start.getSeconds()))
result=result.replace(/%eyear/g,end.getFullYear())
result=result.replace(/%emonth/g,end.getMonth()+1)
result=result.replace(/%eMonth/g,this.leading0(end.getMonth()+1))
result=result.replace(/%edate/g,end.getDate())
result=result.replace(/%eDate/g,this.leading0(end.getDate()))
result=result.replace(/%ehour/g,end.getHours())
result=result.replace(/%eHour/g,this.leading0(end.getHours()))
result=result.replace(/%emin/g,end.getMinutes())
result=result.replace(/%eMin/g,this.leading0(end.getMinutes()))
result=result.replace(/%esec/g,end.getSeconds())
result=result.replace(/%eSec/g,this.leading0(end.getSeconds()))
result=result.replace(/%nyear/g,now.getFullYear())
result=result.replace(/%nmonth/g,now.getMonth()+1)
result=result.replace(/%nMonth/g,this.leading0(now.getMonth()+1))
result=result.replace(/%ndate/g,now.getDate())
result=result.replace(/%nDate/g,this.leading0(now.getDate()))
result=result.replace(/%nhour/g,now.getHours())
result=result.replace(/%nHour/g,this.leading0(now.getHours()))
result=result.replace(/%nmin/g,now.getMinutes())
result=result.replace(/%nMin/g,this.leading0(now.getMinutes()))
result=result.replace(/%nsec/g,now.getSeconds())
result=result.replace(/%nSec/g,this.leading0(now.getSeconds()))
let n2s=Math.abs(now-start)
result=result.replace(/~sd/g,Math.floor(n2s/1000/60/60/24))
result=result.replace(/~sh/g,Math.floor(n2s/1000/60/60)%24)
result=result.replace(/~sH/g,Math.floor(n2s/1000/60/60))
result=result.replace(/~sm/g,Math.floor(n2s/1000/60)%60)
result=result.replace(/~sM/g,Math.floor(n2s/1000/60))
result=result.replace(/~ss/g,Math.floor(n2s/1000)%60)
result=result.replace(/~sS/g,Math.floor(n2s/1000))
let n2e=Math.abs(now-end)
result=result.replace(/~ed/g,Math.floor(n2e/1000/60/60/24))
result=result.replace(/~eh/g,Math.floor(n2e/1000/60/60)%24)
result=result.replace(/~eH/g,Math.floor(n2e/1000/60/60))
result=result.replace(/~em/g,Math.floor(n2e/1000/60)%60)
result=result.replace(/~eM/g,Math.floor(n2e/1000/60))
result=result.replace(/~es/g,Math.floor(n2e/1000)%60)
result=result.replace(/~eS/g,Math.floor(n2e/1000))
return result
},
"leading0":function(num){
num+=""
for(;num.length<2;){
num="0"+num
}
return num
},
}
try{
NTIsRun
}
catch(e){
NTIsRun=true
if(document.readyState=="complete"){
NTFun.initialize()
}
else{
window.addEventListener("load",function(){
NTFun.initialize()
})
}
}