-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTimeBlock.min.js
More file actions
5 lines (5 loc) · 1.37 KB
/
TimeBlock.min.js
File metadata and controls
5 lines (5 loc) · 1.37 KB
1
2
3
4
5
/**
* @author: jarek@psyll.com (Jarosław Szulc)
* @license: MIT
*/
function TimeBlock(interval=1,ms=!0,date=new Date,from="1970-01-01T00:00:00.000Z"){if("number"!=typeof interval)throw new Error("TimeBlock interval must be a number");if("boolean"!=typeof ms)throw new Error("TimeBlock ms must be a boolean value");const startDate=new Date(from),diffInMs=date-startDate,intervalInMs=1e3*interval,intervalCount=Math.floor(diffInMs/intervalInMs),start=new Date(startDate.getTime()+intervalCount*intervalInMs),end=new Date(start.getTime()+intervalInMs-1),prevStart=new Date(start.getTime()-intervalInMs),prevEnd=new Date(end.getTime()-intervalInMs),nextStart=new Date(start.getTime()+intervalInMs),nextEnd=new Date(end.getTime()+intervalInMs),pad=num=>String(num).padStart(2,"0"),formatDate=date=>{const year=date.getFullYear(),month=pad(date.getMonth()+1),day=pad(date.getDate()),hours=pad(date.getHours()),minutes=pad(date.getMinutes()),seconds=pad(date.getSeconds()),milliseconds=ms?`.${String(date.getMilliseconds()).padStart(3,"0")}`:"";return`${year}-${month}-${day} ${hours}:${minutes}:${seconds}${milliseconds}`},id=Math.floor(start.getTime()/intervalInMs),idYear=Math.floor(diffInMs/intervalInMs);return{id:id,idYear:idYear,start:formatDate(start),end:formatDate(end),prevStart:formatDate(prevStart),prevEnd:formatDate(prevEnd),nextStart:formatDate(nextStart),nextEnd:formatDate(nextEnd)}}