有时候在使用JavaScript中编写当前时间的时候,想要通过时间戳来获取当前时间的时分秒来渲染页面,通过公式来计算出时间戳的时分秒,但是会发现,使用公式获取出来的时间分秒都是正确的但是小时根本对不上,代码也没有问题。
代码示例:
<div class="box"></div>
<script>
const nowData = new Date()
const stamp = +nowData
const h = parseInt((stamp/1000) / 60 / 60 % 24)
const m = parseInt((stamp/1000) / 60 % 60)
const s = parseInt((stamp/1000) % 60)
document.querySelector('.box').innerHTML = `${h > 9 ? h : '0' + h}:${m > 9 ? m : '0' + m}:${s > 9 ? s : '0' + s}`
</script>
代码都是正确的,公式也没有错误,但是为什么时间相差了8个小时呢?
通过JavaScript另一种方法,不用时间戳,直接获取时分秒就是正确的
示例代码:
<div class="box"></div>
<script>
const nowData = new Date()
const h = nowData.getHours()
const m = nowData.getMinutes()
const s = nowData.getSeconds()
document.querySelector('.box').innerHTML = `${h > 9 ? h : '0' + h}:${m > 9 ? m : '0' + m}:${s > 9 ? s : '0' + s}`
</script>
但是有些时候不得不使用时间戳来获取时间,该如何解决呢?
时间戳原理
通过将 nowDate
转换为时间戳(单位为秒),然后将其除以60再除以60,再取余24,来计算小时数。这意味着该计算是基于从1970年1月1日起的秒数进行的,也称为Unix时间戳。它是一个全球性的标准时间。它取决于用户所在的时区,因此可能与时间戳计算得到的小时数不同。时区不一致,所以需要加上时区相差的时间!!
而 nowDate.getHours()
方法返回的是基于系统本地时间的小时数。如果你想要得到与本地时间相对应的小时数,可以选择使用 nowDate.getUTCHours()
方法来获取UTC时间。