第一百一十一篇:基本引用类型Date

第一,百一,十一篇,基本,引用,类型,date · 浏览次数 : 101

小编点评

**Chapter 5: Working with Dates and Times** **1. Basic Data Types and References** - **Value Types:** Date, String, Number - **Reference Types:** Objects - **Objects:** Instances of specific data types that store and provide access to data and functions together. **2. Date and Time Creation** - `new Date()` constructor: - `let date = new Date()`: Creates a new Date object for the current date. - `let date = new Date("December 9, 2022")`: Creates a Date object for a specific date and time. **3. Date and Time Parsing** - `Date.parse()` method: - `let date = Date.parse("December 9, 2022")`: Parses a string representation of a date and creates a Date object. - `let date = new Date(Date.parse("December 9, 2022"))`: Creates a Date object directly from a string. **4. Date Time Operations** - `Date.UTC()` method: - Returns the Date object's absolute millisecond offset from January 1, 1970 UTC. - `let today = new Date(Date.UTC(2022, 11, 9, 12, 20, 20))`: Creates a Date object in UTC time. **5. Inheritance and Method Overriding** - Date type overrides methods from other types: - `toLocalestring()`: Returns date and time in local time zone. - `tostring()`: Returns date and time with time zone information. - `valueOf()`: Returns the date's absolute millisecond offset. **6. Special Notes** - `Date.parse()` uses a different format for date strings than `new Date()`. - `valueOf()` returns milliseconds since January 1, 1970 UTC.

正文

好家伙,本篇为《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相似的内容:

第一百一十一篇:基本引用类型Date

好家伙,本篇为《JS高级程序设计》第五章的学习笔记 1.基本引用类型 引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像极了“类”) 经常被人错误的称作“类”。 虽然从技术上讲JavaScript是一门面向对象语言,但是ECMAScri

第一百一十八篇: JavaScript 原型链式继承

好家伙,好家伙,本篇为《JS高级程序设计》第八章“对象、类与面向对象编程”学习笔记 1.原型链 原型链是JS实现"继承"的方案之一 ECMA-262把原型链定义为ECMAScript的主要继承方式。其基本思想就是通过原型继承多个引用类型的属性和方法。 重温一下构造函数、原型和实例的关系:每个构造函数

第一百零五篇:变量的原始值和引用值

好家伙,JS基础接着学, 本篇内容为《JS高级程序设计》第四章学习笔记 1.原始值和引用值 ECMAScript变量可以包含两种不同类型的数据:原始值和引用值。原始值(primitive value)就是最简单的数据,引用值(reference value)则是由多个值构成的对象。 在把一个值赋给变

第一百一十二篇: JS数组Array(一)数组基本用法

好家伙, 1.数组 Array应该就是ECMAScript中最常用的类型了。ECMAScript数组跟其他编程语言的数组有很大区别。 跟其他语言中的数组一样,ECMAScript 数组也是一组有序的数据, 但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。 这意味着可以创建一个数组,它的第

第一百零七篇:基本数据类型(undefined,null,boolean类型)

好家伙, 本篇内容为《JS高级程序设计》第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Number, String和Symbol。 Symbol (符号)是ECMAScript6新增的。还有一种复杂数据类型

第一百一十篇:内存泄漏和垃圾回收(JS)

好家伙,本篇内容为《JS高级程序设计》第四章的学习笔记 1.内存泄露 1.1.什么是内存泄漏? 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄漏缺陷具有隐蔽性、积累性的特征,比其

第一百一十四篇: JS数组Array(三)数组常用方法

好家伙,本篇为《JS高级程序设计》第六章“集合引用类型”学习笔记 1.数组的复制和填充 批量复制方法 copyWithin(),以及填充数组方法fill()。 这两个方法的函数签名类似,都需要指定既有数组实例上的一个范围,包含开始索引,不包含结束索引。 使用这个方法不会改变数组的大小。 1.1.fi

第一百一十五篇: JS集合引用类型Map

好家伙,本篇为《JS高级程序设计》第六章“集合引用类型”学习笔记 1.Map ECMAScript6以前,在JavaScript中实现“键/值”式存储可以使用object来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值。 但这种实现并非没有问题,为此TC39委员会专门为“键/值”存储定

第一百一十六篇: JavaScript理解对象

好家伙,本篇为《JS高级程序设计》第八章“对象、类与面向对象编程”学习笔记 1.关于对象 ECMA-262将对象定义为一组属性的无序集合。严格来说,这意味着对象就是一组没有特定顺序的值。 对象的每个属性或方法都由一个名称来标识,这个名称映射到一个值。正因为如此(以及其他还未讨论的原因),可以把 EC

[apue] 一图读懂 Unix 时间日期例程相互关系

GMT 和 UTC 时间有何区别?Unix 时间例程为何不处理闰秒?系统时区是如何设置的?哪些时间例程受夏时制影响?localtime 和 gmtime 是否共享内部存储区?strftime 获取第几周使用的 %U/%V/%W 有何区别?linux date 和 mac date 语法有何区别?本文一一为你解答