code: function AnyTimer(fn, timeval, isInterval) {
  	this.clear = clear
  	var isClear
  	if (!(timeval >= 1)) timeval = 1 // ensure number
  	var baseTime = Date.now()
  	var nextTargetTime = baseTime + timeval
  	var timer
  	var interval
  
  	if (isInterval && timeval <= TIMEOUT_MAX) { // this actually works with setInterval
  		interval = setInterval(fn, timeval)
  	} else timerFire()
  
  	function timerFire() {
  		var remaining = nextTargetTime - Date.now()
  		if (remaining <= 0) {
  			timer = null
  			fn()
  			if (isInterval && !isClear) {
  				nextTargetTime += isInterval
  				setTimer(nextTargetTime - Date.now())
  			}
  		} else setTimer(remaining)
  	}
  
  	function setTimer(remaining) {
  		if (remaining >= time1day) remaining = time1day
  		timer = setTimeout(timerFire, remaining)
  	}
  
  	function clear() {
  		isClear = true
  		if (timer) {
  			var t = timer
  			timer = null
  			clearTimeout(t)
  		}
  		if (interval) {
  			var i = interval
  			interval = null
  			clearInterval(i)
  		}
  	}
  }
docs: /*
  Provide timer and interval
  fn(): function
  timeval: number: unit ms
  isInterval: boolean
  
  JavaScript setTimeout and setInterval can only handle periods of about 24 days