第一百一十一篇:基本引用类型Date
好家伙,本篇为《JS高级程序设计》第五章的学习笔记
1.基本引用类型
引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像极了“类”)
经常被人错误的称作“类”。
虽然从技术上讲JavaScript是一门面向对象语言,但是ECMAScript缺少传统的面向对象编程语言所具备的某些基本结构,
包括类和接口。引用类型有时候也被称为对象定义,因为他们描述了自己的对象引诱的属性和方法。
对象被认为是某个特定引用类型的实例。新对象通过使用new操作符后跟一个构造函数(constructor)来创建。
构造函数就是用来创建新对象的函数,比如下面这行代码:
let now= new Date();
这行代码创建了引用类型Date的一个新实例,并将它保存在变量now中。
Date()在这里就是构造函数,它负责创建一个只有默认属性和方法的简单对象。
ECMAScript提供了很多像 Date 这样的原生引用类型,帮助开发者实现常见的任务。
2.Date()
看他名字就知道,这肯定是一个跟时间有关的引用类型
使用new操作符来调用Date构造函数:
let date =new Date()
来看看我们的”日期“长什么样:

在不给Date()构造函数传参的情况下,创建的对象将保存当前日期和时间。
如果我们要基于其它日期和时间创建日期对象,则必须传入其毫秒表示(1970年1月1日24点之后的毫秒数)

(我去,还真是)
所以我们会有辅助方法:Date.parse()和Date.UTC()
2.1.Date.parse()
Date.parse()方法接收一个表示日期的字符申参数,尝试将这个字符串转换为表示该日期的意数。
所有实 现都必须支持下列日期格式:
口“月/日/年”,如*5/23/2019*;
口“月名日,年”,如“May 23,2019";
口“周几月名日年时:分:秒时区”,如*Tue May 23 2019 00:00:00 GMT—0700";
ISO 8601扩展格式“YYYY-MM-DDTHH:mm:ss.sssZ”,如2019-05-23T00:00:00(只适用于 兼容ES5的实现)。
如果传给Date.parse()的字符串并不表示日期,则该方法会返回NaN。
如果直接把表示日期的字符串传给Date 构造函数,那么Date会在后台调用Date.parse()。
换句话说,下面两行代码代码跟前面那行代码是等价的:
let today = new Date(Date.parse("December 9,2022"));
let tomorrow = new Date("December 9,2022");
看图

2.2.Date.UTC()
Date.UTC()方法也返回日期的毫秒表示,但使用的是跟Date.parse()不同的信息来生成这个值。
传给Date.UTC()的参数是年、零起点月数(1月是0,2月是1,以此类推)、日(1~31)、时(0~23)、分、秒和毫秒。
这些参数中,只有前两个(年和月)是必需的。如果不提供日,那么默认为1日。
其他参数的默认值都是0。例子如下:
//GTM时间2022年1月1日零点
let today = new Date(Date.UTC(2022,0)); //GMT时间2022年12月9日,20点20分20秒
//注意月是要减一输入的
let tomorrow = new Date(Date.UTC(2022,11,9,12,20,20)); console.log(today);
console.log(tomorrow);

(发现了一些和书里面不同的地方,比如输入的小时,会给你从早上八点开始加,如输入12,输出的就是 20:00 )
与Date.parse()一样,Date.UTC()也会被Date构造函数隐式调用,但有一个区别:
这种情况下创建的是本地日期,不是GMT日期。不过Date 构造函数跟 Date.UTC()接收的参数是一样的。
因此,如果第一个参数是数值,则构造函数假设它是日期中的年,第二个参数就是月,以此类推
//本地时间2022年12月9日,12点20分20秒
let today = new Date(2022, 11, 9, 12, 20, 20);
//GMT时间2022年12月9日,20点20分20秒
let tomorrow = new Date(Date.UTC(2022, 11, 9, 12, 20, 20));

2.3.时间的加减法
我们可以对时间进行加减操作
//GTM时间2022年12月9日,20点20分10秒
let today = new Date(Date.UTC(2022,11,9,12,20,10));
//GMT时间2022年12月9日,20点20分20秒
let tomorrow = new Date(Date.UTC(2022,11,9,12,20,20)); let now = tomorrow -today; console.log(now);

亦或是去看看一个函数的执行时间
function dosth() {}
let start = new Date();
dosth();
let now =new Date();
result = now -start;
(ennn,也不完全能看到)

3.继承的方法
与其他类型一样,Date类型重写了 toLocalestring()、tostring()和valueof()方法。但与
其他类型不同,重写后这些方法的返回值不一样。Date类型的toLocalestring()方法返回与浏览器运行的本地环境一致的日期和时间。
这通常意味着格式中包含针对时间的AM(上午)或PM(下午),但不包含时区信息(具体格式可能因浏览器而不同)。
tostring()方法通常返回带时区信息的日期和时间,而时间也是以24小时制(0~23)表示的。
Date类型的valueOf()方法根本不返回字符串,这个方法被重写后返回的是日期的毫秒表示,
因此,操作符(如大小于号)可以直接使用它返回的值,举个例子:
let today = new Date(2022, 11, 9, 12, 20, 20);
let tomorrow = new Date(2022, 11, 9, 12, 20, 21); console.log(today.valueOf()) console.log(today>tomorrow);
console.log(today<tomorrow);

That's all
第一百一十一篇:基本引用类型Date的更多相关文章
- “全栈2019”Java第一百一十一章:内部类可以被覆盖吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- python第一百一十一天 --Django 6 model 的相关操作
创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db ...
- 第一百一十七篇: JavaScript 工厂模式和原型模式
好家伙,本篇为<JS高级程序设计>第八章"对象.类与面向对象编程"学习笔记 1.工厂模式 工厂模式是另外一种关注对象创建概念的创建模式. 它的领域中同其它模式的不同 ...
- 第一百一十一节,JavaScript,BOM浏览器对象模型
JavaScript,BOM浏览器对象模型 学习要点: 1.window对象 2.location对象 3.history对象 BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM ...
- 【leetcode 简单】 第一百一十一题 可怜的小猪
有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在15分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少 ...
- “全栈2019”Java第一百一十章:局部内部类与匿名内部类区别详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 第十一篇 Integration Services:日志记录
本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SS ...
- 第十一篇 SQL Server安全审核
本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服 ...
- Python开发【第二十一篇】:Web框架之Django【基础】
Python开发[第二十一篇]:Web框架之Django[基础] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...
- .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...
随机推荐
- [转帖]如何在本地编译安装部署自动化回归测试平台 AREX
https://zhuanlan.zhihu.com/p/613877597 AREX 官方 QQ 交流群:656108079 本文将详细为大家介绍一下自动化回归测试平台 AREX 以及如何在本地进行 ...
- [转帖]SPECjvm测试工具详解
ARM服务器测试大纲中指定了要使用specjvm测试Java虚拟机性能,所以就上网找开源的测试套. 简介 SPECjvm2008(java虚拟机基准测试)是用来测试java运行环境(JRE)性能的基准 ...
- 根目录被赋予777 -R权限后的处理过程
解决某研发手残导致的系统宕机问题的处理过程 背景 2022.8.8 公司一台服务器出现了宕机的现象: 所有的人都无法远程, 都提示密码错误. 但是网络还是通的. 2022.8.12 出差前一天去了一趟 ...
- [知乎]聊一聊threadlocal
作者:李二狗链接:https://www.zhihu.com/question/341005993/answer/1996544027来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- ELK搭建简单说明
ELK搭建简单说明 简单说明 周天陪孩子学习,自己简单研究了下如何处理 不是很系统,仅是能够展示部分文件的日志. 需要有很多坑需要进行填充. 搭建模式 自己采取rpm包方式进行搭建 183 机器上面安 ...
- 小程序之使用阿里字体图标 定义主题的颜色 控制首页标题的样式 如何使用组件 水平居中和垂直居中的方式 H5 关于上线后,
项目搭建 1==> 需要创建的文件夹 styles 存放公共的样式 components 存放组件 lib第三方库的 utils 自己的帮助库 reques 自己的接口 2==>如何快速创 ...
- Vue3中shallowReactive和shallowRef对数据进行非深度监听
1.Vue3 中 ref 和 reactive 都是深度监听 默认情况下, 无论是通过 ref 还是 reactive 都是深度监听. 深度监听存在的问题: 如果数据量比较大,非常消耗性能. 有些时候 ...
- flask session 伪造
flask session 伪造 一.session的作用 由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求 ...
- Linux下rz命令上传文件失败处理
在Linux服务器上使用rz命令上传文件时,有时候会遇到文件上传失败,此时会在当前目录下生成一堆大小为0的乱码文件,如下图所示: 这些文件有时候rm命令也无法删除,下面提供两种通过find命令删除的方 ...
- 关于Oracle多租户架构下的每个PDB的dbtime查询
有客户咨询在19c多租户这样的架构中,除了查询cdb本身外,还想查询具体pdb的负载(DB Time),但是使用之前的脚本发现查询不到,只显示cdb自己的结果,客户写的脚本如下: SELECT i.i ...