【JavaScript内置对象】Date对象,从零开始

news2024/11/20 7:00:34

【JavaScript内置对象】Date对象,从零开始

时间的表示方式

  • 时间表示的基本概念
    • 最初,人们是通过观察太阳的位置来决定时间的,但是这种方式有一个最大的弊端就是不同区域位置大家使用的时间是不一致的。
      • 相互之间没有办法通过一个统一的时间来沟通、交流。
    • 之后,人们开始制定的标准时间是英国伦敦的皇家格林威治****( Greenwich )天文台的标准时间(刚好在本初子午线经过的地方),这个时间也称之为GMT(Greenwich Mean Time)
      • 其他时区根据标准时间来确定自己的时间,往东的时区(GMT+hh:mm),往西的时区(GMT+hh:mm);
    • 但是,根据公转有一定的误差,也会造成GMT的时间会造成一定的误差,于是就提出了根据原子钟计算的标准时间UTC(Coordinated Universal Time)
    • 目前GMT依然在使用,主要表示的是某个时区中的时间,而UTC是标准的时间。

JavaScript中时间的表示

❤️‍🔥 JavaScript中我们使用Date来表示和处理时间
🖥 MDN文档https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

一、创建 Date 对象

创建一个 JavaScript Date 实例,该实例呈现时间中的某个时刻。Date 对象则基于 Unix Time Stamp,即自 1970 年 1 月 1 日(UTC)起经过的毫秒数。

💚 语法

❤️‍🔥 Date()构造函数有四种基本形式:⬇️

new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
        // 创建Date对象的方式
        // 1.没有传入任何的参数, 获取到当前时间
        const date1 = new Date()
        console.log('new Date() :', date1)
        // 2.传入一个Unix时间戳
        // 1s -> 1000ms
        const date2 = new Date(1000)
        console.log('value:', date2)
        // 3.传入参数: 时间字符串
        const date3 = new Date('2023-09-14 15:00:09')
        console.log('dateString:', date3)
        // 4.传入具体的年月日时分秒毫秒
        const date4 = new Date(2023, 8, 14, 15, 0, 9)
        console.log('year, monthIndex...:', date4)

在这里插入图片描述

◼ 这个格式是什么意思呢?

二、参数详解

1.没有参数

  • new Date()
    如果没有提供参数,那么新创建的 Date 对象表示实例化时刻的日期和时间。

2.dateString时间的表示方式

  • new Date(dateString)
  • 日期的表示方式有两种:RFC 2822 标准或者 ISO 8601 标准
    • 默认打印的时间格式是RFC 2822标准

在这里插入图片描述

  • 我们也可以将其转化成ISO 8601标准
    在这里插入图片描述

  • 【toISOString】 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString

  • toISOString() 方法返回一个 ISO(ISO 8601 Extended Format)格式的字符串: YYYY-MM-DDTHH:mm:ss.sssZ。时区总是 UTC(协调世界时),加一个后缀“Z”标识。

    • YYYY:年份,0000 ~ 9999
    • MM:月份,01 ~ 12
    • DD:日,01 ~ 31
    • T:分隔日期和时间,没有特殊含义,可以省略  HH:小时,00 ~ 24
    • mm:分钟,00 ~ 59
    • ss:秒,00 ~ 59
    • .sss:毫秒
    • Z:时区

Date获取信息的方法

❤️‍🔥 从Date对象中获取各种详细的信息

  • getFullYear():获取年份(4 位数);
  • getMonth():获取月份,从 0 到 11;
  • getDate():获取当月的具体日期,从 1 到 31(方法名字有点迷);
  • getHours():获取小时;
  • getMinutes():获取分钟;
  • getSeconds():获取秒钟;
  • getMilliseconds():获取毫秒;

❤️‍🔥 获取某周中的星期几:

  • getDay():获取一周中的第几天,从 0(星期日)到 6(星期六);

Date设置信息的方法

❤️‍🔥 Date也有对应的设置方法:

  • setFullYear(year, [month], [date])
  • setMonth(month, [date])
  • setDate(date)
  • setHours(hour, [min], [sec], [ms])
  • setMinutes(min, [sec], [ms])
  • setSeconds(sec, [ms])
  • setMilliseconds(ms)
  • setTime(milliseconds)
        var date = new Date()

        console.log(date)
        console.log(date.toISOString())

        // 1.获取想要的时间信息
        //  - getFullYear(): 获取年份(4 位数);
        const year = date.getFullYear()
        console.log('年:', year)
        //  - getMonth(): 获取月份,从 0 到 11;
        const month = date.getMonth() + 1
        console.log("月:", month)
        //  - getDate(): 获取当月的具体日期,从 1 到 31(方法名字有点迷);
        const day = date.getDate()
        console.log("日:", day)
        //  - getHours(): 获取小时;
        const hours = date.getHours()
        console.log("时:", hours)
        //  - getMinutes(): 获取分钟;
        const minutes = date.getMinutes()
        console.log("分:", minutes)
        //  - getSeconds(): 获取秒钟;
        const seconds = date.getSeconds()
        console.log("秒:", seconds)
        //   - getMilliseconds(): 获取毫秒;
        const millSeconds = date.getMilliseconds()
        console.log("豪秒:", millSeconds)
        console.log(`${year}-${month}-${day} ${hours}:${minutes}:${seconds}:${millSeconds}`)
        // ❤️‍🔥 获取某周中的星期几:
        //  - getDay(): 获取一周中的第几天,从 0(星期日)到 6(星期六);

        const weekDay = date.getDay()
        console.log("周几:", weekDay)



        // 2.也可以给date设置时间(了解)
        date.setFullYear(2033)
        // 自动校验
        date.setDate(32)
        console.log(date)

3.Unix 时间戳

  • new Date(value) : value一个 Unix 时间戳

  • Unix 时间戳:它是一个整数值,表示自1970年1月1日00:00:00 UTC以来的毫秒数。

  • ❗️请注意大多数 Unix 时间戳功能仅精确到最接近的秒。

  • ❤️‍🔥 在JavaScript中,我们有多种方法可以获取这个时间戳:

    • 方式一: new Date().getTime()
    • 方式二: new Date().valueOf()
    • 方式三: +new Date()
    • 方式四: Date.now()
  • 💻

        // Date对象, 转成时间戳
        const date = new Date()
        const date2 = new Date("2033-03-03")

        // 方法一: 当前时间的时间戳

        const timestamp1 = Date.now()
        console.log(timestamp1)

        // 方法二/三将一个date对象转成时间戳
        const timestamp2 = date.getTime()
        const timestamp3 = date.valueOf()
        console.log(timestamp2)
        console.log(timestamp3)

        // 方法四: 了解
        console.log(+date)

  • 🍏 场景: 获取到Unix时间戳之后,我们可以利用它来测试代码的性能:

          // 计算这个操作所花费的时间
          const startTime = Date.now()
          for (let i = 0; i < 100; i++) {
              console.log(i)
          }
    
          const endTime = Date.now()
    
          console.log('执行100次for循环的打印所消耗的时间:', endTime - startTime)
    

Date.parse()方法

Date.parse(str) 方法可以从一个字符串中读取日期,并且输出对应的Unix时间戳

  • Date.parse(str) :
    • 作用等同于 new Date(dateString).getTime() 操作;

    • 需要符合 RFC2822 或 ISO 8601 日期格式的字符串;

      • ✓ 比如YYYY-MM-DDTHH:mm:ss.sssZ
    • 其他格式也许也支持,但结果不能保证一定正常;

    • 如果输入的格式不能被解析,那么会返回NaN;
      ⚠️ 不推荐在 ES5 之前使用 Date.parse 方法,因为字符串的解析完全取决于实现。直到至今,不同宿主在如何解析日期字符串上仍存在许多差异,因此最好还是手动解析日期字符串(在需要适应不同格式时库能起到很大帮助)。

4.分别提供日期与时间的每一个成员

  • new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]])
  • 当至少提供了年份与月份时,这一形式的 Date() 返回的 Date 对象中的每一个成员都来自下列参数。
  • 没有提供的成员将使用最小可能值(对日期为1,其他为0)。
参数
year表示年份的整数值。0 到 99 会被映射至 1900 年至 1999 年,其他值代表实际年份。
monthIndex表示月份的整数值,从 0(1 月)到 11(12 月)。
date(可选)表示一个月中的第几天的整数值,从 1 开始。默认值为 1。
hours(可选)表示一天中的小时数的整数值 (24 小时制)。默认值为 0(午夜)。
minutes(可选)表示一个完整时间(如 01:10:00)中的分钟部分的整数值。默认值为 0。
seconds(可选)表示一个完整时间(如 01:10:00)中的秒部分的整数值。默认值为 0。
milliseconds(可选)表示一个完整时间的毫秒部分的整数值。默认值为 0。

当 Date 作为构造函数调用并传入多个参数时,如果数值大于合理范围时(如月份为 13 或者分钟数为 70),相邻的数值会被调整。比如 new Date(2013, 13, 1) 等于 new Date(2014, 1, 1),它们都表示日期 2014-02-01(注意月份是从 0 开始的)。其他数值也是类似,new Date(2013, 2, 1, 0, 70) 等于 new Date(2013, 2, 1, 1, 10),都表示同一个时间:2013-03-01T01:10:00。

注意

  • 如果没有输入任何参数,则 Date 的构造器会依据系统设置的当前时间来创建一个 Date 对象。
  • 如果提供了至少两个参数,其余的参数均会默认设置为 1(如果没有指定 day 参数)或者 0(如果没有指定 day 以外的参数)。
  • JavaScript 的时间由世界标准时间(UTC)1970 年 1 月 1 日开始,用毫秒计时,一天由 86,400,000 毫秒组成。Date 对象的范围是 -100,000,000 天至 100,000,000 天(等效的毫秒值)。
  • Date 对象为跨平台提供了统一的行为。时间属性可以在不同的系统中表示相同的时刻,而如果使用了本地时间对象,则反映当地的时间。
  • Date 对象支持多个处理 UTC 时间的方法,也相应地提供了应对当地时间的方法。UTC,也就是我们所说的格林威治时间,指的是 time 中的世界时间标准。而当地时间则是指执行 JavaScript 的客户端电脑所设置的时间。
  • 以一个函数的形式来调用 Date 对象(即不使用 new 操作符)会返回一个代表当前日期和时间的字符串。

属性

  • Date.prototype (en-US)
    允许为 Date 对象添加属性。

  • Date.length
    Date.length 的值是 7。这是该构造函数可接受的参数个数。

        const date = new Date()
        console.log(date)

        // - Date.prototype (en-US)
        // 允许为 Date 对象添加属性。
        Date.prototype.test = '123'

        console.log(date.test) //123

        // - Date.length
        // Date.length 的值是 7。这是该构造函数可接受的参数个数。

        console.log(Date.length) //7

方法

  • Date.now()
    返回自 1970-1-1 00:00:00 UTC(世界标准时间)至今所经过的毫秒数。

  • Date.parse()
    解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。

❗️ 备注: 由于浏览器差异和不一致,强烈建议不要使用Date.parse解析字符串。

  • Date.UTC()
    接受和构造函数最长形式的参数相同的参数(从 2 到 7),并返回从 1970-01-01 00:00:00 UTC 开始所经过的毫秒数。

案例一:动态显示时间

    <div class="time"></div>
    <script>
        const timeEl = document.querySelector('.time')

        function padLeft(str, content, count) {
            str = String(str)
            content = content || '0'
            count = count || 2

            return str.padStart(count, content)
        }

        const timeFn = () => {
            const date = new Date()
            const year = date.getFullYear()
            const month = padLeft(date.getMonth() + 1)
            const day = padLeft(date.getDate())
            const hour = padLeft(date.getHours())
            const minute = padLeft(date.getMinutes())
            const second = padLeft(date.getSeconds())

            timeEl.textContent = `${year}-${month}-${day} 
        ${hour}:${minute}:${second}`

        }

        setInterval(timeFn, 1000);


        // function addZero(num) {
        //     return num < 10 ? '0' + num : num
        // }

        //
        // timeEl.textContent = `${year}-${addZero(month)}-${addZero(day)}
        // ${addZero(hour)}:${addZero(minute)}:${addZero(second)}`

    </script>

案例二:倒计时显示

  • 效果:
    在这里插入图片描述
    .count-down {
            margin: 20px;
            display: flex;
            align-items: center;
            justify-content: center;
            color: red;
        }

        .count-down>span {
            margin: 0 2px;
            font-weight: 700;
        }

        .count {
            background-color: red;
            color: white;
            font-family: '微软雅黑';
            padding: 3px 7px;
            border-radius: 7px;
            font-size: 18px;
            letter-spacing: 1px;
        }
    <div class="count-down">
        <span class="count hour">00</span>
        <span>:</span>
        <span class="count minute">51</span>
        <span>:</span>
        <span class="count second">55</span>
    </div>
        // 1. 获取元素
        const hourEl = document.querySelector('.hour')
        const minEl = document.querySelector('.minute')
        const secdEl = document.querySelector('.second')
        // 2. 设置结束时间
        const endDate = new Date()
        endDate.setHours(24)
        endDate.setMinutes(0)
        endDate.setSeconds(0)

        setInterval(() => {
            // 获取当前时间
            // 当前时间到 24:00:00
            const nowDate = new Date()
            const intervalTime = Math.floor((endDate.getTime() - nowDate.getTime()) / 1000)

            const hour = Math.floor(intervalTime / 3600)

            const min = Math.floor(intervalTime / 60) % 60
            const second = intervalTime % 60
            // 2. 设置内容
            hourEl.textContent = formatPadLeft(hour)
            minEl.textContent = formatPadLeft(min)
            secdEl.textContent = formatPadLeft(second)

        }, 1000);


        function formatPadLeft(content, count, padStr) {
            count = count || 2
            padStr = padStr || "0"

            content = String(content)
            return content.padStart(count, padStr)
        }

其他案例【格式化时间】
https://blog.csdn.net/Sonnenlicht77/article/details/129534112?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15W SIP木质网络音箱

SV-7041VP15W SIP木质网络音箱 一、描述 SV-7041VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源副音箱&#xff0c…

LeetCode每日一题:1222. 可以攻击国王的皇后(2023.9.14 C++)

目录 1222. 可以攻击国王的皇后 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 原理思路&#xff1a; 1222. 可以攻击国王的皇后 题目描述&#xff1a; 在一个 8x8 的棋盘上&#xff0c;放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 …

Flutter与Native通信原理剖析与实践

通信原理 我们分几种场景来介绍Flutter和Native之间的通信。 Native发送数据给FlutterFlutter发送数据给NativeFlutter发送数据给Native&#xff0c;然后Native回传数据给Flutter Flutter与Native通信机制 在讲解Flutter与Native之间是如何传递数据之前&#xff0c;我们先了…

k8s集群中部署项目之流水线

微服务项目部署之流水线编写 一、部署微服务项目环境说明 1.1 代码托管到gitee 1.2 镜像托管到dockerhub 用户名&#xff1a;nextgomsb 密码&#xff1a;abc***.com1.3 流水线工具 KubeSphere 二、通过KubeSphere部署之拉取代码流水线编写 2.1 准备凭证 2.2 编辑流水线 pipe…

MySQL学习6:索引

来源 教学视频来源&#xff1a;黑马程序员 MySQL数据库入门到精通&#xff0c;从mysql安装到mysql高级、mysql优化全囊括 简介 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着…

vue事件处理表单输入绑定

1.监听事件 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件&#xff0c;并在事件触发时执行对应的 JavaScript。用法&#xff1a;v-on:click"handler" 或 click"handler"。 事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;事…

使用Git把项目上传到Gitee的详细步骤

1.到Git官网下载并安装 2.到Gitee官网进行注册&#xff0c;然后在Gitee中新建一个远程仓库 3.设置远程仓库的参数 4.返回Gitee查看仓库是否生成成功 5.新建一个文件夹作为你的本地仓库 6.将新建好的文件夹初始化成本地仓库 第一步&#xff1a;右键点击刚创建的本地仓库&#…

2003-2018年各省能源结构(煤炭占比)(含原始数据和计算过程)

2003-2018年各省能源结构&#xff08;煤炭占比&#xff09;&#xff08;含原始数据和计算过程&#xff09; 1、时间&#xff1a;2003-2018年 2、指标&#xff1a;原煤、洗精煤、其他洗煤、型煤、焦炭、焦炉煤气、其他煤气、其他焦化产品、原油、汽油、煤油、柴油、燃料油、液…

基于python解决鸡兔同笼问题

一、什么是鸡兔同笼问题&#xff1f; 鸡兔同笼问题是一个经典的数学问题。问题描述&#xff1a;鸡和兔子共有头数a和脚数b&#xff0c;求鸡和兔子的数量。 解析&#xff1a;设鸡的数量为x&#xff0c;兔子的数量为y&#xff0c;那么可以得到以下两个方程&#xff1a; 1. x y…

C++ PrimerPlus 复习 第二章 进入c++

第一章 命令编译链接文件 make文件 文章目录 创建C程序&#xff1b;C程序的一般格式&#xff1b;main()函数&#xff1b;使用cout对象进行输出,使用cin对象进行输入&#xff1b;coutcin #include编译指令&#xff1b;名称空间定义和使用简单函数。在C程序中加入注释&#xff1…

Nginx配置指南:如何定位、解读与优化Linux上的Nginx设置

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

Harmony系统更改手机IP

在当今的互联网环境中&#xff0c;我们经常需要更改手机的IP地址来绕过限制或保护我们的隐私。虽然在一些操作系统上更改IP地址相对较容易&#xff0c;但在Harmony系统上&#xff0c;这可能会有些困难。因此&#xff0c;本文将分享一种在Harmony系统上免费更改手机IP地址的方法…

linux 下实现一个进度条

倒计时 理解 printf 打印的内容是被放在输出缓冲区的 fflush(stdout) 刷新 输出缓冲区&#xff1b;\n 也是一种刷新的策略我们称之为行刷新 理解一下回车换行 首先&#xff1a;回车是回车 换行是换行 回车是回到这一行的开头 换行是换到下一行 所以我们平时使用的 Enter 键 …

一线大厂Redis高并发缓存架构实战与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失…

二叉树的概念及存储结构

目录 1.树的概念 1.1树的相关概念 1.2树的表示与应用 2.二叉树的概念及结构 2.1二叉树的概念 2.1.1特殊的二叉树 2.2.2二叉树的性质 2.2二叉树的结构 2.2.1顺序存储 2.2.2链式存储 这是一篇纯理论的博客,会对数据结构中的二叉树进行详细的讲解,让你对树的能有个清晰的…

智能语音机器人竞品调研

一、腾讯云-智能客服机器人 链接地址&#xff1a;智能客服机器人_在线智能客服_智能客服解决方案 - 腾讯云 二、阿里云-智能语音机器人 链接地址&#xff1a;智能对话机器人-阿里云帮助中心 链接地址&#xff1a;智能外呼机器人的业务架构_智能外呼机器人-阿里云帮助中心 三、火…

word文档怎么转换成pdf?几个实用文档转换方法

word文档怎么转换成pdf&#xff1f;PDF文档可以保护文档的格式和布局。如果你将Word文档发送给他人&#xff0c;他人可能会使用不同版本的Word软件打开文档&#xff0c;导致格式和布局发生变化。但是&#xff0c;如果你将Word文档转换为PDF文档&#xff0c;无论对方使用什么软件…

Android Studio的笔记--Android API的方法和位置

Android API 官网API中文API源码位置 官网API Package Index 可以修改查看对应的API等级的方法 中文API Android 包索引 源码位置 在工程的位置如下 \frameworks\base\core\java\android\ 与君共勉&#xff01;

聚观早报 | iPhone 15系列正式发布;月饼专利申请超10000项

【聚观365】9月14日消息 iPhone 15系列正式发布 月饼专利申请超10000项 “五个女博士”自建研究院 2023中国民营企业研发十强公布 华为和小米达成全球专利交叉许可协议 iPhone 15系列正式发布 2023年苹果秋季新品发布会如期而至。发布会上&#xff0c;苹果发布了iPhone 1…

visual studio code导入自定义模块(pycharm中能够运行的文件,vs code报错:未找到指定模块)

一、先看下目录结构 二、在main.py中导入Utils中的模块&#xff0c;直接导入即可 from Utils.custom_event_parse import CustomEventParse三、在custom_event_parse.py中导入execl_base.py中的模块 导入模块&#xff1a; from Utils.execl_base import ExeclBase以上这种导…