【JS】日期对象及时间戳的使用(制作距离指定日期的倒计时)

日期对象(Date对象)是用来表示时间的对象,可以得到当前的系统时间。它可以进行倒计时,时间格式化,日期的相关计算等。

一.Date对象的创建

1. 获得当前时间 new Date()

通过new Date()来实例化一个日期对象得到当前的系统时间:

javascript 复制代码
const date = new Date()
console.log(date);    //Thu Dec 04 2025 17:33:20 GMT+0800 (中国标准时间)

2. 获得指定时间 new Date('2025-12-12') (可用于指定日期前的倒计时)

在new Date()里增加参数: new Date('2025-12-12'),可显示指定日期

javascript 复制代码
const date = new Date('2025-12-12 12:00:00')
console.log(date);    //Fri Dec 12 2025 12:00:00 GMT+0800 (中国标准时间)

二.日期对象方法

日期对象返回的数据我们不能直接使用,所以需要转换为我们日常使用需要的格式。

1. 获取时间的方法

通过 对象.方法 来获取我们想要的时间格式。

需要注意的是:获取月份和星期的范围是从0开始的,,所以在实际使用中需要将月份和星期加1。

javascript 复制代码
const date = new Date()
console.log(date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+' '+
date.getHours()+':'+date.getMinutes()+':'+date.getSeconds())  //2025-12-4 17:54:24
  </script>

2. 写一个显示当前时间的页面

step1:获取dom元素

step2.写一个获取当前时间的函数:使用日期对象方法获取年月日时分秒。(如果时分秒要求位数相同用0补齐需要加一个补齐0逻辑:<10则加0)

step3.使用定时器每隔1秒调用时间函数显示当前时间,用innerHTML更新页面时间(定时器第一秒会产生空白,在定时器前面先写一个日期就可以了)

javascript 复制代码
<script>
    let div = document.querySelector('div') //获取div元素
    
    function showTime() {
      const date = new Date() //实例化日期对象
      let year = date.getFullYear() //获取年份
      let month = date.getMonth() + 1 //获取月份,注意月份是从0开始的,所以要加1  
      let day = date.getDate() //获取日期
      let hours = date.getHours() //获取小时
      hours = hours < 10 ? '0' + hours : hours
      let minutes = date.getMinutes() //获取分钟
      minutes = minutes < 10 ? '0' + minutes : minutes
      let seconds = date.getSeconds() //获取秒数
      seconds = seconds < 10 ? '0' + seconds : seconds
        return  `${year}年${month}月${day}日  ${hours}时${minutes}分${seconds}秒` 
    }
    div.innerHTML = showTime() //初始调用一次显示时间
    setInterval(function(){
      div.innerHTML = showTime()
    }, 1000)
  </script>

时间效果:

如果对时间的要求不高,只需要固定的格式,我们可以使用其他方法:

**toLocaleString():**返回的日期格式是 年/月/日 时:分:秒

toLocaleDateString(): 返回的日期格式是 年/月/日

**toLocaleTimeString():**返回的日期格式是 时:分:秒

javascript 复制代码
 function showTime() {
      const date1 = new Date() 
      const date2 = new Date()
      const date3 = new Date()
        return  `date1为 ${date1.toLocaleString()} 
            <br> date2为 ${date2.toLocaleDateString()}
            <br> date3为 ${date3.toLocaleTimeString()}`       
    }

时间效果:

三.时间戳

时间戳是一个毫秒数,每一个时间都有唯一的一个时间戳,如果计算倒计时效果前面的方法无法计算,需要使用到时间戳。

倒计时算法:

  • 将来的时间戳-现在的时间戳 = 剩余的时间毫秒数
  • 剩余的时间毫秒数 转换为 剩余时间的 年月日时分秒 就是 倒计时时间

1. 获取时间戳的三种方法

1.1 使用getTime() 方法(此方法必须实例化Date对象)

javascript 复制代码
   const date = new Date();//必须实例化
   console.log(date.getTime())  //1764845679637

1.2 简写 +new Date()(无需实例化对象)

javascript 复制代码
console.log(+new Date())  //1764845816351

原本的new Date()产生的是一个日期字符串,在前面加上+之后会将字符串转换为数字型。

+运算符 涉及到JavaScript 隐式类型转换在本篇末尾会详细介绍一下。

1.3 使用Date.now()(无需实例化对象,但是只能得到当前的时间戳,而前面两种可以返回指定时间的时间戳)

javascript 复制代码
console.log(Date.now());  //1764846457078

2. 将时间戳转换为 天 时 分 秒 的方法 parseInt()

通过时间戳得到的是毫秒,需要转换为秒在计算

转换公式:

  • d = parsenInt(总秒数/60/60/24) //计算天数
  • h = parsenInt(总秒数/60/60%24) //计算小时
  • m = parsenInt(总秒数/60%60) //计算分钟
  • s = parsenInt(总秒数%60) //计算秒

3.2 做一个距离指定日期的倒计时

需求:展示到2025年12月31日还有多长时间

step1:用将来的时间戳 - 现在的时间戳

step2:把剩余的时间戳转换为天时分秒

javascript 复制代码
<script>
    const div = document.querySelector('div')
    function getTime(){
      const endTime = +new Date('2025-12-31')
      let nowTime = +new Date()
      let timeDiff = endTime - nowTime // 时间差的毫秒数
      d = parseInt(timeDiff / 1000 / 60 / 60 / 24)
      h = parseInt(timeDiff / 1000 / 60 / 60 % 24)
      m = parseInt(timeDiff / 1000 / 60 % 60)
      s = parseInt(timeDiff / 1000 % 60)
      div.innerHTML = `距离2025年12月31日还有${d}天${h}小时${m}分${s}秒`
    }
    getTime() //先调用一次显示时间
    setInterval(getTime,1000) //每隔一秒刷新一次时间
  </script>

四.关于 +运算符的 隐式类型转换

以下面四个代码的输出为例:

javascript 复制代码
    console.log('1'+'1') //11
    console.log(1+1)     //2
    console.log(1+'1')   //11
    console.log('1'+1)   //11 

JS 中 + 运算符有两种作用算术加法字符串拼接:

  • 当 + 两边的操作数中,至少有一个是字符串类型时,会触发字符串拼接(其他类型会被隐式转为字符串)
  • +两边都是数字类型时,才会触发算术加法

console.log('1'+'1') 两边都是字符串类型 ,触发字符串拼接,直接把两个'1'连起来,结果是'11'

console.log(1+1)两边都是数字类型 ,触发算术加法,1+1=2,结果是2

console.log(1+'1')一边是数字1,一边是字符串'1',触发字符串拼接:数字1会被隐式转为字符串'1' ,再拼接成'11'

除了+,其他算术运算符(-/*//等)会触发数字类型转换 :不管操作数是什么类型,都会先转成数字再运算。比如'1'-1会把'1'转成数字1,结果是0;'a'-1转数字失败,结果是NaN。


最后

如果这篇文章对你有帮助的话就点个赞吧!

相关推荐
Zfox_44 分钟前
【Go】反射
开发语言·后端·golang
郝学胜-神的一滴44 分钟前
Linux kill命令与kill函数:从信号原理到实战解析
linux·服务器·开发语言·c++·程序人生
未来之窗软件服务1 小时前
操作系统应用(三十七)C#华旭金卡身份证SDK-HX-FDX3S—东方仙盟筑基期
开发语言·c#·身份证阅读器·酒店管理系统·仙盟创梦ide
say_fall1 小时前
C语言编程实战:每日一题:有效的括号
c语言·开发语言·数据结构·
百锦再1 小时前
.NET到Java的终极迁移指南:最快转型路线图
android·java·开发语言·python·rust·go·.net
小飞侠在吗1 小时前
vue watch
前端·javascript·vue.js
修一呀1 小时前
【阿里云ASR教程】阿里云一句话识别(NLS)实战:带 Token 缓存 + WAV 自动重采样的 Python 脚本
开发语言·python
1024小神1 小时前
使用AVFoundation实现二维码识别的角点坐标和区域
开发语言·数码相机·ios·swift
陌路201 小时前
C++ 单例模式
开发语言·c++