JS日期对象实现动态时钟

一、Date对象使用方法

1.普通函数用法:Date 对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。

2.构造函数用法:Date 还可以当作构造函数使用。对它使用 new 命令,会返回一个 Date 对象的实例。如果不加参数,则显示当前时间.

例:

let data1 = Date()
console.log(data1)
let data2 = new Date()
console.log(data2)

 得到结果相同

但第一种方法只能得到当前时间,使用第二种方法可以得到指定时间,返回一个对应指定时间的实例

如new Date('2022-11-17') ;new Date('2022/11/17');等

Data对象返回的时间戳实际上是指当前时间和 格林尼治时间 1970年1月1日,0点0分0秒,相差的毫秒数。简单理解,就是从 格林尼治时间 1970年1月1日,0点0分0秒,到现在,过了多少毫秒,在前面添加‘+’号可以将其转换为毫秒数,可以通过计算指定日期的时间戳减去现在的时间戳,就可以得到未来一个时间到现在的时间差,用来实现时间倒数功能

将来的时间戳 - 现在的时间戳 = 剩余时间毫秒数,再通过将剩余时间转换成年月日时分秒等,就可以得到具体倒数时间

二、Date对象的实例方法

get类方法

 to类方法

Date.prototype.toUTCString()方法返回对应的 UTC 时间。

Date.prototype.toDateString()方法返回日期字符串,不包含年月日。

Date.prototype.toLocaleDateString() 方法返回一个字符串,代表日期的当地写法,不含时分秒

三、实际案例:日期对象实现动态时钟

 HTML

    <!-- 用来显示当前具体时间 -->
    <p></p>
    <!-- 时钟容器 -->
    <div class="clock">
        <!-- 时针 -->
        <div class="h"></div>
        <!-- 分针 -->
        <div class="m"></div>
        <!-- 秒针 -->
        <div class="s"></div>
    </div>

CSS

       * {
            margin: 0;
            padding: 0;
        }
        /* 定位到时钟下方显示当前时间 */
        p {
            position: absolute;
            width: 350px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: skyblue;
            top: 500px;
            left: 50%;
            transform: translateX(-50%);
        }
        /* 时钟容器 */
        .clock {
            position: relative;
            margin: 0 auto;
            width: 500px;
            height: 500px;
            background: url(./images/clock.jpeg) no-repeat;
            background-size: contain;
        }

        .clock div {
            position: absolute;
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
        }
        /* 时针 */
        .h {
            background: url(./images/hours.png) no-repeat center;
            background-size: contain;
        }
        /* 分针 */
        .m {
            background: url(./images/minute.png) no-repeat center;
            background-size: contain;
        }
        /* 秒针 */
        .s {
            background: url(./images/second.png) no-repeat center;
            background-size: contain;
        }

JS

        // 获取时针图片
        let hour = document.querySelector('.h')
        // 获取分针图片
        let minute = document.querySelector('.m')
        // 获取秒针图片
        let second = document.querySelector('.s')
        // 定义一个当前时间函数
        let nowTime = function () {
            // 获取当前时间戳
            let data = new Date()
            // 获取年份
            let y = data.getFullYear()
            // 获取月份(注意月份要+1才是现实月份,data.getMonth()返回的值是0~11)
            let mm = data.getMonth() + 1
            // 获取日期
            let d = data.getDate()
            // 获取小时
            let h = data.getHours()
            // 获取分钟
            let m = data.getMinutes()
            // 获取秒数
            let s = data.getSeconds()
            // 获取毫秒数(为了给秒针添加旋转更精细)
            let ms = data.getMilliseconds()
            // 获取页面中p标签
            let p = document.querySelector('p')
            // 给p标签里添加内容,显示当前具体时间
            p.innerHTML = `现在时间是${y}年${mm}月${d}月${h}时${m}分${s}秒`

            // 设置秒针旋转度数
            second.style.transform = "rotate(" + (s + ms / 1000) * 6 + "deg)"
            // 设置分针旋转度数
            minute.style.transform = "rotate(" + (m + s / 60) * 6 + "deg)"
            // 设置时针旋转度数
            hour.style.transform = "rotate(" + (h % 12 + m / 60) * 30 + "deg)"
        }
        // 先执行一次,可以让页面打开是就会有显示时间
        nowTime()
        // 设置定时器,每10ms执行一次nowTime()函数
        // 设定的时间可以改变函数执行的间隔,数字越小,页面秒针旋转越流畅
        setInterval(nowTime, 10);

四、最终效果及素材

 效果示意

素材

 

 

 五、源码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态时钟</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        /* 定位到时钟下方显示当前时间 */
        p {
            position: absolute;
            width: 350px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: skyblue;
            top: 500px;
            left: 50%;
            transform: translateX(-50%);
        }

        /* 时钟容器 */
        .clock {
            position: relative;
            margin: 0 auto;
            width: 500px;
            height: 500px;
            background: url(./images/clock.jpeg) no-repeat;
            background-size: contain;
        }

        .clock div {
            position: absolute;
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
        }

        /* 时针 */
        .h {
            background: url(./images/hours.png) no-repeat center;
            background-size: contain;
        }

        /* 分针 */
        .m {
            background: url(./images/minute.png) no-repeat center;
            background-size: contain;
        }

        /* 秒针 */
        .s {
            background: url(./images/second.png) no-repeat center;
            background-size: contain;
        }
    </style>
</head>

<body>
    <!-- 用来显示当前具体时间 -->
    <p></p>
    <!-- 时钟容器 -->
    <div class="clock">
        <!-- 时针 -->
        <div class="h"></div>
        <!-- 分针 -->
        <div class="m"></div>
        <!-- 秒针 -->
        <div class="s"></div>
    </div>

    <script>
        // 获取时针图片
        let hour = document.querySelector('.h')
        // 获取分针图片
        let minute = document.querySelector('.m')
        // 获取秒针图片
        let second = document.querySelector('.s')
        // 定义一个当前时间函数
        let nowTime = function () {
            // 获取当前时间戳
            let data = new Date()
            // 获取年份
            let y = data.getFullYear()
            // 获取月份(注意月份要+1才是现实月份,data.getMonth()返回的值是0~11)
            let mm = data.getMonth() + 1
            // 获取日期
            let d = data.getDate()
            // 获取小时
            let h = data.getHours()
            // 获取分钟
            let m = data.getMinutes()
            // 获取秒数
            let s = data.getSeconds()
            // 获取毫秒数(为了给秒针添加旋转更精细)
            let ms = data.getMilliseconds()
            // 获取页面中p标签
            let p = document.querySelector('p')
            // 给p标签里添加内容,显示当前具体时间
            p.innerHTML = `现在时间是${y}年${mm}月${d}月${h}时${m}分${s}秒`

            // 设置秒针旋转度数
            second.style.transform = "rotate(" + (s + ms / 1000) * 6 + "deg)"
            // 设置分针旋转度数
            minute.style.transform = "rotate(" + (m + s / 60) * 6 + "deg)"
            // 设置时针旋转度数
            hour.style.transform = "rotate(" + (h % 12 + m / 60) * 30 + "deg)"
        }
        // 先执行一次,可以让页面打开是就会有显示时间
        nowTime()
        // 设置定时器,每10ms执行一次nowTime()函数
        // 设定的时间可以改变函数执行的间隔,数字越小,页面秒针旋转越流畅
        setInterval(nowTime, 10);
    </script>
</body>

</html>

 

 

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐不撒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值