效果:

代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Canvas绘制时间轴</title>
<style>
body {
padding: 0;
margin: 0;
}
canvas {
display: block;
margin: 200px auto;
}
</style>
</head>
<body>
<canvas id="solar" width="800" height="400"></canvas>
<script>
var width = document.querySelector("#solar").width
var height = document.querySelector("#solar").height
var HEIGHT = this.height
var WIDTH = this.width
var timeWidth = WIDTH - 100
var cell = timeWidth/(12*60)
var timeW = WIDTH * 0.042
var timeH = timeW * 0.75
var timeGap = WIDTH * 0.063
var interval = {}
var context = {}
init()
function init(){
let canvas = document.querySelector("#solar")
let ctx = canvas.getContext("2d")
this.width = canvas.width
this.height = canvas.height
context = ctx
this.clear()
this.countLine()
interval = setInterval(() => {
this.countLine()
}, 5000)
}
function clear(){
context.clearRect(0, 0, this.width, this.height)
}
function countLine() {
let beginY = 100
let beginX = 50
let beginTime = 8
let time = new Date();
let t1 = new Date(time.toLocaleDateString() + " 8:30:00")
let t2 = new Date(time.toLocaleDateString() + " 20:30:00")
let diffMinute = (time - t1)/1000/60
let len = diffMinute * cell + beginX
if(time > t2){
diffMinute = (time - t2)/1000/60
len = diffMinute * cell + beginX
beginTime = 20
}
context.beginPath()
context.moveTo(len, beginY)
context.lineTo(len, HEIGHT)
context.strokeStyle = "#9099A5"
context.stroke()
this.drawScale(beginTime)
}
function drawScale(beginTime) {
this.clear()
let beginY = 100
let beginX = 50
context.strokeStyle = "#9099A5"
context.moveTo(beginX, beginY)
context.lineTo(beginX + timeWidth, beginY)
context.stroke()
for(let i = 0; i <= 72; i++){
if(i%6 === 0){
context.moveTo(beginX, beginY - 30)
context.lineTo(beginX, beginY + 30)
context.stroke()
if(beginTime >= 24){
beginTime = beginTime - 24
}
context.fillText(beginTime + ':30', beginX-10, beginY - 50)
beginTime +=1
}else{
context.moveTo(beginX, beginY - 15)
context.lineTo(beginX,beginY + 15)
context.stroke()
}
beginX += cell * 10
}
}
</script>
</body>
</html>