【JavaScript 漫游】【013】Date 对象知识点摘录

img

文章简介

本文为【JavaScript 漫游】专栏的第 013 篇文章,记录了 JS 语言中 Date 对象的重要知识点。

  1. 普通函数的用法
  2. 构造函数的用法
  3. 日期的运算
  4. 静态方法,包括:Date.now()Date.parse()Date.UTC()
  5. 实例方法,包括:Date.prototype.valueOf()to 类方法、get 类方法和 set 类方法

普通函数的用法

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

Date();
// 'Wed Feb 07 2024 17:03:14 GMT+0800 (中国标准时间)'

注意,即使带有参数,Date 作为普通函数使用时,返回的还是当前时间。

Date(2019, 9, 1);
// 'Wed Feb 07 2024 17:05:18 GMT+0800 (中国标准时间)'

构造函数的用法

Date 还可以当作构造函数使用。对它使用 new 命令,会返回一个 Date 对象的实例。如果不加参数,实例代表的就是当前时间。

var today = new Date();

Date 实例有一个独特的地方。其他对象求值的时候,都是默认调用 .valueOf() 方法,但是Date 实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。

var today = new Date();
today;
// 等同于
today.toString();
// Wed Feb 07 2024 17:09:08 GMT+0800 (中国标准时间)

作为构造函数时,Date 对象可以接受多种格式的参数,返回一个该参数对应的时间实例。

// 参数为时间零点开始计算的毫秒数
new Date(1707297016159);
// Wed Feb 07 2024 17:10:16 GMT+0800 (中国标准时间)

// 参数为日期字符串
new Date('Feb, 6, 2024');
// Tue Feb 06 2024 00:00:00 GMT+0800 (中国标准时间)

// 参数为多个整数
// 代表年、月、日、小时、分钟、秒、毫秒
new Date(2024, 2, 6, 15, 26, 33);
// Wed Mar 06 2024 15:26:33 GMT+0800 (中国标准时间)

关于 Date 构造函数的参数,有几点说明。

第一点,参数可以是负整数,代表1970年元旦之前的时间。

new Date(-1707297016159);
Thu Nov 25 1915 22:49:43 GMT+0800 (中国标准时间)

第二点,只要是能被Date.parse()方法解析的字符串,都可以当作参数。

new Date('2024-2-6');
new Date('February, 15, 2024');
new Date('FEB, 6, 2024');
// ...

第三点,参数为年、月、日等多个整数时,年和月是不能省略的,其他参数都可以省略的。也就是说,这时至少需要两个参数,因为如果只使用年这一个参数,Date 会将其解释为毫秒数。

new Date(2024);
// Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间)

各个参数的取值范围如下。

  • 年:使用四位数年份,比如 2000。如果写成两位数或个位数,则加上 1900 ,即 10 代表 1910年。如果是负数,表示公元前
  • 月:0 表示一月,依次类推,11 表示12月
  • 日:131
  • 小时:023
  • 分钟:059
  • 秒:059
  • 毫秒:0999

注意,月份从 0 开始计算,但是,天数从 1 开始计算。另外,除了日期的默认值为 1,小时、分钟、秒钟和毫秒的默认值都是 0

这些参数如果超出了正常范围,会被自动折算。比如,如果月设为 15,就折算为下一年的 4 月。

new Date(2024, 15);
// Tue Apr 01 2025 00:00:00 GMT+0800 (中国标准时间)
new Date(2024, 0, 0);
// Sun Dec 31 2023 00:00:00 GMT+0800 (中国标准时间)

参数还可以使用负数,表示扣去的时间。

new Date(2024, -1);
// Fri Dec 01 2023 00:00:00 GMT+0800 (中国标准时间)
new Date(2024, 0, -1);
// Sat Dec 30 2023 00:00:00 GMT+0800 (中国标准时间)

日期的运算

类型自动转换时,Date 实例如果转为数值,则等于对应的毫秒数;如果转为字符串,则等于对应的日期字符串。所以,两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。

new Date(2024, 2, 6) - new Date(2024, 2, 5);
// 86400000
new Date(2024, 2, 6) + new Date(2024, 2, 5);
// 'Wed Mar 06 2024 00:00:00 GMT+0800 (中国标准时间)Tue Mar 05 2024 00:00:00 GMT+0800 (中国标准时间)'

静态方法

Date.now()

返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数。

Date.now(); // 1707298447468

Date.parse()

用来解析日期字符串,返回该时间距离时间零点的毫秒数。

日期字符串应该符合YYYY-MM-DDTHH:mm:ss:sssZ 格式,其中最后的 Z 表示时区。但是,其他格式也可以被解析。

Date.parse('Feb 6, 2024');
Date.parse('2024-2-6');
Date.parse('2024-2-6T17:36:00');
// ...

如果解析失败,返回 NaN

Date.UTC()

Date.UTC() 接受年、月、日等变量作为参数,返回该时间距离时间零点的毫秒数。

Date.UTC(2024, 2, 6, 17, 45, 45, 666);
// 1709747145666

该方法的参数用法与 Date 构造函数完全一致,比如月从 0 开始计算,日期从 1 开始计算。区别在于 Date.UTC 方法的参数,会被解释为 UTC 时间(世界标准时间),Date 构造函数的参数会被解释为当前时区的时间。

实例方法

Date 的实例对象,有几十个自己的方法,除了 valueOftoString ,可以分为以下三类。

  • to 类:从 Date 对象返回一个字符串,表示指定的时间
  • get 类:获取 Date 对象的日期和时间
  • set 类:设置Date 对象的日期和时间

Date.prototype.valueOf()

返回实例对象距离时间零点对应的毫秒数,等同于 getTime 方法

new Date().valueOf();
new Date().getTime();
// 1707299455536

to 类方法

  • Date.prototype.toString() :返回一个完整的日期字符串
  • Date.prototype.toUTCString():返回对应的 UTC 时间的日期字符串
  • Date.prototype.toISOString():返回符合 ISO8601 写法的日期字符串
  • Date.prototype.toJSON():符合 JSON 格式的 ISO 日期字符串
  • Date.prototype.toDateString():返回日期字符串(不含小时、分和秒)
  • Date.prototype.toTimeString():返回时间字符串(不含年月日)
  • Date.prototype.toLocaleString():完整的本地时间
  • Date.prototype.toLocaleDateString():本地日期(不含小时、分和秒)
  • Date.prototype.toLocaleTimeString():本地时间(不含年月日)

get 类方法

  • Date.prototype.getTime():返回实例距离时间零点的毫秒数,等同于 valueOf()
  • Date.prototype.getDate():返回实例对象对应每月的几号(从 1 开始)
  • Date.prototype.getDay():返回星期几,星期日为0,星期一为1,以此类推
  • Date.prototype.getFullYear():返回四位的年份
  • Date.prototype.getMonth():返回月份(0表示1月,11表示12月)
  • Date.prototype.getHours():返回小时(0-23)
  • Date.prototype.getMilliseconds():返回毫秒(0-999)
  • Date.prototype.getMinutes():返回分钟(0-59)
  • Date.prototype.getSeconds():返回秒(0-59)
  • Date.prototype.getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。

Date 对象还提供了这些方法对应的 UTC 版本,用来返回 UTC 时间:getUTCDate()getUTCFullYear()getUTCMonth()getUTCDay()getUTCHours()getUTCMinutes()getUTCSeconds()getUTCMilliseconds()

set 类方法

  • Date.prototype.setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳
  • Date.prototype.setFullYear(year [, month, date]):设置四位年份
  • Date.prototype.setHours(hour [, min, sec, ms]):设置小时(0-23)
  • Date.prototype.setMilliseconds():设置毫秒(0-999)
  • Date.prototype.setMinutes(min [, sec, ms]):设置分钟(0-59)
  • Date.prototype.setMonth(month [, date]):设置月份(0-11)
  • Date.prototype.setSeconds(sec [, ms]):设置秒(0-59)
  • Date.prototype.setTime(milliseconds):设置毫秒时间戳

同样的,这些方法也有对应的 UTC 版本:setUTCDate()setUTCFullYearsetUTCHours()setUTCMilliseconds()setUTCMinutes()setUTCMonth()setUTCSeconds()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

以太网协议

以太网 .以太网协议格式🎨目的地址,源地址mac地址格式 . 以太网协议格式🎨 目的地址,源地址 此处的地址,叫做mac地址(物理地址),长度是6个字节 mac地址的作用也是用来区分不同的主机 IP地址的长度是4字节 IP地址负责网络层(整体)转发,mac地址负责数据链…

K8S之运用节点选择器指定Pod运行的节点

node节点选择器的使用 使用场景实践使用nodeName使用nodeSelectornodeName和nodeSelector混合使用1、设置了nodeName 和 设置 Node上都不存在的标签。看调度情况2、设置nodeName 为node1 和 设置 node2上才有的标签。看调度情况 实践总结 使用场景 默认情况,在创建…

计算机网络——05Internet结构和ISP

Internet结构和ISP 互连网络结构:网络的网络 端系统通过接入ISPs连接到互连网 住宅、公司和大学的ISPs 接入ISPs相应的必须是互联的 因此任何2个端系统可相互发送分组到对方 导致的“网络的网络”非常复杂 发展和演化是通过经济的和国家的政策来驱动的 问题&…

Windows下搭建Redis Sentinel

下载安装程序 下载Redis关于Windows安装程序,下载地址 下载成功后进行解压,解压如下: 配置redis和sentinel 首先复制三份redis.windows.conf,分别命名为:redis.6379.conf、redis.6380.conf、redis.6381.conf&…

多线程JUC:等待唤醒机制(生产者消费者模式)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:多线程&JUC:解决线程安全问题——synchronized同步代码块、Lock锁 📚订阅专栏:多线程&am…

【C语言】深入理解指针

目录 1.字符指针 2.指针数组 3.数组指针 4.数组传参与指针传参 一维数组传参 二维数组传参 一级指针传参 二级指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针(了解即可) 8.回调函数 回调函数的应用:库函数qsort …

Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)

比赛链接:Round 923 (Div. 3) EE题传送门:E. Klever Permutation 题目:E. Klever Permutation 样例 #1 样例输入 #1 5 2 2 3 2 10 4 13 4 7 4样例输出 #1 2 1 1 3 2 1 8 4 10 2 7 5 9 3 6 4 10 1 13 5 9 2 12 6 8 3 11 7 1 6 3 7 2 5 4分…

【06】C++ 模板初阶

文章目录 🌈 Ⅰ 泛型编程🌈 Ⅱ 函数模板1. 函数模板概念2. 函数模板格式 🌈 Ⅰ 泛型编程 1. 泛型编程引入 假设当前要实现交换两个变量的功能,那么就得根据实参的数据类型来对该函数进行重载。重载的函数只是数据类型不同而已&a…

逐行拆解Guava限流器RateLimiter

逐行拆解Guava限流器RateLimiter 常见限流算法 计数器法 设置一个时间窗口内允许的最大请求量,如果当前窗口请求数超过这个设定数量,则拒绝该窗口内之后的请求。 关键词:时间窗口,计数器。 举个例子,我们设置1秒钟…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步,开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”(效果如下图所示)&#…

基于物联网的实时数据分析(简单介绍)

在当今这个信息化、数字化飞速发展的时代,物联网(Internet of Things, IoT)和实时数据分析成为了技术革新的两大支柱。对于刚入行的新手来说,理解这两个概念及其相互作用不仅是迈入这一领域的第一步,更是掌握未来技术趋…

Android 粒子喷泉动效

一、前言: 在学习open gl es实现动效的时候,打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别,以及难易程度,因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理: 粒子动效本质上…

Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES

📁前情提要:Springboot整合Elasticsearch(一):Linux下安装 Elasticsearch 8.x 目录 一、使用 elasticsearch-head 插件连接 1、下载压缩包 2、在 chrome 浏览器中添加扩展程序 3、修改IP地址,点击连接 …

Excel+VBA处理高斯光束

文章目录 1 图片导入与裁剪2 获取图片数据3 数据拟合 1 图片导入与裁剪 插入图片没什么好说的,新建Excel,【插入】->【图片】。 由于图像比较大,所以要对数据进行截取,选中图片之后,点击选项卡右端的【图片格式】…

Postgresql 的编译安装与包管理安装, 全发行版 Linux 通用

博客原文 文章目录 实验环境信息编译安装获取安装包环境依赖编译安装安装 contrib 下工具代码 创建用户创建数据目录设置开机自启动启动数据库常用运维操作 apt 安装更新源安装 postgresql开机自启修改配置修改密码 实验环境信息 Ubuntu 20.04Postgre 16.1 编译安装 获取安装…

HiveSQL——不使用union all的情况下进行列转行

参考文章: HiveSql一天一个小技巧:如何不使用union all 进行列转行_不 union all-CSDN博客文章浏览阅读881次,点赞5次,收藏10次。本文给出一种不使用传统UNION ALL方法进行 行转列的方法,其中方法一采用了concat_wsposexplode()方…

[经验] 喉咙沙哑的原因及应对方法是什么 #学习方法#其他#媒体

喉咙沙哑的原因及应对方法是什么 生活中,喉咙不舒服是很常见的情况,尤其是喉咙沙哑,让人感到特别难受,影响睡眠和生活质量。那么喉咙沙哑怎么办呢?接下来我会分享一些简单易行的方法,帮助你缓解这种不适感…

搭建yum仓库服务器

安装 1.安装linux 1.1安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 1.2下载 cd /opt/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 1.3解压 tar -xvf nginx-1.25.3.tar.gz 1.4配置 cd nginx-1.25.3 ./configure --pre…

【Larry】英语学习笔记语法篇——从句=连词+简单句

目录 三、从句连词简单句 1、必须有连词 主从结构 疑问词的词性 2、名词性从句 同位语从句 形式主语 形式宾语 that的省略 3、形容词性从句(上) 关系代词 关系词的作用 介词前置问题 4、形容词性从句(中) 定语关系…

程序的内存模型

内存分区模型 C程序在执行时,将内存大方向分为4个区域 1.代码区:存放函数体的二进制代码,有操作系统进行管理 2.全局区:存放全局变量和静态变量以及常量 3.栈区:由编译器自动分配及释放,存放函数的参数…