红宝书 ? 5.1 基本引用类型-Date
引用类型是把数据和功能组织到一起的结构,从技术上讲JavaScript是一门面向对象语言,但是ECMAScript缺少传统的面向对象所具备的某些基本结构,入类和接口(但是ES6出现了类的概念,同时TypeScript也有了接口的概念)。
引用类型有时候也被称为对象定义,因为它们描述了自己的对象应有的属性和方法。
函数也是一种引用类型
Date
其参考了Java的java.util.Date,Js中的 Date 类型可以精确表示 1970 年 1 月 1 日之前及之后 285616 年的日期。
创建
不传参则是当前时间
let now = new Date()
当然我们很多情况使用是需要传参的,这个参数需要转换为1970年1月1日后的毫秒数。因此Js提供了两个方法 Date.parse()
和 Date.UTC()
。我们下面要学习的大部分方法都是在原型链上的。
Date.parse()
首先看两行代码 代码输出是一样的。
// "2019-04-22T16:00:00.000Z"
let someTime = new Date("4/23/2019")
// "2019-04-22T16:00:00.000Z"
let someTime = new Date(Date.parse("4/23/2019"))
这是为什么?即使没调用parse,后台还是隐式调用了 Date.parse
支持转换的日期格式如下:
月/日/年 5/23/2019
月巴拉巴拉 日,年 May巴拉巴拉 23,2019
周几 月名 日 年 时:分:秒 时区 Tue May 23 2019 00:00:00 GMT-0700
YYYY-MM-DDTHH:mm:ss.sssZ 2019-05-23T00:00:00
如果传给Date.parse的字符串并不表示日期,则返回NaN
Date.UTC()
同样是返回日期的毫秒表示。
区别是,参数是年、月(0-11表示1-12月)、日(1-31)、时(0-23)、分、秒、毫秒。
Date.UTC将时间转换成秒数,再通过new Date()转换成日期对象
// 2000年1月1日零点
let y2k = new Date(Date.UTC(2000,0))
// 时间 2005 年 5 月 5 日下午 5 点 55 分 55 秒
let allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));
同样,当我们不调用 Date.UTC,JS后台处理的时候同样会隐式调用这个方法。
继承的方法
与其他类型一样,Date类型也重写了 toLocalString() toString() 和 valueOf() ,但是返回值不一样。
新创建一个Date对象
let date = new Date() // Sat Nov 06 2021 17:56:57 GMT+0800 (中国标准时间)
// 时间格式变了
date.toLocaleString() // 2021/11/6 下午5:56:57
// 只是将类型转为字符串 没什么用处
date.toString() // "Sat Nov 06 2021 17:56:57 GMT+0800 (中国标准时间)"
// 返回的是日期的毫秒表示
date.valueOf() // 1636192617072
因为这个方法被重写后返回的是日期的毫秒表示,因此,操作符可以使用(> 、<)可以使用它返回的值。
let date1 = new Date(2019,0,1) // 2019年1月1日
let date2 = new Date(2019,1,1) // 2019年2月1日
date1 < date2 // true 实则是比较的valueOf()值
date1.valueOf() //1546272000000
date2.valueOf() //1548950400000
日期格式化方法
用于格式化日期的方法,返回值都是字符串。
let date = new Date()
date.toDateString() // Sat Nov 06 2021
date.toTimeString() // 18:45:50 GMT+0800 (中国标准时间)
date.toLocaleDateString() // 2021/11/6
date.toLocaleTimeString() // 下午6:45:50
date.toUTCString() // Sat, 06 Nov 2021 10:45:50 GMT
常用的方法
let date = new Date()
date.getTime() // 1636204570244 返回日期的毫秒数与valueOf()相同
// 年
date.getFullYear() // 2021 返回年
date.setFullyear(2019) // 将2021年改为 2019年
console.log(date) // Wed Nov 06 2019 21:16:10 GMT+0800 (中国标准时间)
// 月
date.getMonth() // 因为是0-11 所以想要得到真实的需要月份需要 +1
date.setMonth(8) // 0-11 所以传8得到的是9月
console.log(date) // Fri Sep 06 2019 21:16:10 GMT+0800 (中国标准时间)
// 日
date.getDate() // 得到 几日 注意不是getDay()
date.setDate()
// 周几
date.getDay() // 返回日期中的周几(0周日 6周六)
// 时
date.getHours() // 0~23
date.setHours() // 如果设置的值大于23,则加日
// 分
date.getMinutes() // 0~59
date.setMinutes(59) // 如果大于59则加到时上
// 秒
date.getSeconds() // 返回日期中的秒
date.setSeconds(89) // 同理
// 毫秒 ? 1秒=1000毫秒
date.getMilliseconds() // 返回毫秒
date.setMilliseconds()
moment
moment.js 满足了大部分工作中需要的对时间的处理,推荐使用。比原生的Date会更好处理。 ✈️
相关文章
- Linux 电源管理及实例分析
- 关于配置深度开发学习环境所遇到的问题与解决
- 搭建深度学习环境(Pytorch)
- CVPR 2022 Oral | LAS-AT: 一种基于可学习攻击策略的对抗训练新范式
- 西电 NeurIPS 2022 | 基于结构聚类的异质图自监督学习
- 基于JavaSwing的超市管理系统
- 基于springBoot的人力资源管理系统(免费获取)
- 基于ssm的图书借阅管理系统
- 《深入理解Kafka与Pulsar:消息流平台的实践与剖析》送书活动
- 代替VBA!用Python轻松实现Excel编程(文末赠书)
- 推荐系统多任务学习上分技巧
- 《深入理解Java虚拟机》读书笔记(五)
- R语言Fama-French三因子模型实际应用:优化投资组合|附代码数据
- 编程思想图书推荐,新手入门应该看些啥
- 业务流程管理的关键点是什么?
- 数字化升级生物医药行业,数字化采购管理系统赋能企业提升采购管理效益
- 精益现场管理改善能解决什么问题?
- 学会SpringBoot的配置管理了,我的部署成倍提高效率?
- 零信任数据动态授权桔皮书 附下载地址
- Linux NetFilter, IP Tables and Conntrack学习文章