日期对象
JavaScript 处理日期数据类似于 Java。这两种语言有许多一样的处理日期的方法,也都是以 1970 年 1 月 1 日 00:00:00 以来的毫秒数来储存数据类型的。
Date 对象的范围是相对距离 UTC 1970 年 1 月 1 日 的前后 100,000,000 天。
创建一个日期对象
let newObjectName =new Date([parameters])
注:
- 使用 Date 时与内置对象 console 和 Math 不同,它需要借助 new 关键字才能使用。
- 不使用 new 关键字来调用 Date 对象将返回当前时间和日期的字符串
前边的语法中的参数(parameters)可以是一下任何一种:
- 无参数 : 创建今天的日期和时间,例如:
today = new Date();. - 一个符合以下格式的表示日期的字符串:"月 日,年 时:分:秒"。例如:
let Xmas95 = new Date("December 25, 1995 13:30:00")。如果你省略时、分、秒,那么他们的值将被设置为 0。 - 一个年,月,日的整型值的集合,例如:
let Xmas95 = new Date(1995, 11, 25)。 - 一个年,月,日,时,分,秒的集合,例如:
let Xmas95 = new Date(1995, 11, 25, 9, 30, 0);. - ==[[ISO 8601]]格式(推荐)==
时间戳
时间戳是指1970年01月01日00时00分00秒起至现在的总秒数或毫秒数,它是一种特殊的计量时间的方式。
注:ECMAScript 中时间戳是以毫秒计的。 总共三种方法
// 1. 实例化
const date = new Date()
// 2. 获取时间戳
console.log(date.getTime())
// 还有一种获取时间戳的方法
console.log(+new Date())
// 还有一种获取时间戳的方法
console.log(Date.now())
前两种方法可以返回指定时间的时间戳,第三种不行
日期(Date)方法
处理日期时间的 Date 对象方法可分为以下几类:
- "set" 方法,用于设置 Date 对象的日期和时间的值。
- "get" 方法,用于获取 Date 对象的日期和时间的值。
- "to" 方法,用于返回 Date 对象的字符串格式的值。
- parse 和 UTC 方法,用于解析 Date 字符串。
通过“get”和“set”方法,你可以分别设置和获取秒,分,时,日,星期,月份,年。这里有个 getDay 方法可以返回星期,但是没有相应的 setDay 方法用来设置星期,因为星期是自动设置的。这些方法用整数来代表以下这些值:
- 秒,分:0 至 59
- 时:0 至 23
- 星期:0 (周日) 至 6 (周六)
- 日期:1 至 31
- 月份:0 (一月) to 11 (十二月)
- 年份:从 1900 开始的年数
具体方法
getTime返回从 1970 年 1 月 1 日 00:00:00 的毫秒数
getFullYear 获取四位年份
getMonth 获取月份,取值为 0 ~ 11
getDate 获取月份中的每一天,不同月份取值也不相同
getDay 获取星期,取值为 0 ~ 6
getHours 获取小时,取值为 0 ~ 23
getMinutes 获取分钟,取值为 0 ~ 59
getSeconds 获取秒,取值为 0 ~ 59
| 方法 | 描述 | 对应的 set 方法 | 说明 |
|---|---|---|---|
getTime | 获取从 1970 年 1 月 1 日 00:00:00 的毫秒数 | setTime | 设置从 1970 年起的毫秒数 |
getFullYear | 获取四位年份 | setFullYear | 设置年份,可以同时修改年、月、日 |
getMonth | 获取月份(0 ~ 11,0 表示 1 月) | setMonth | 设置月份,超出范围会自动调整年份 |
getDate | 获取月份中的某一天(1 ~ 31) | setDate | 设置日期,超出范围会自动调整月份 |
getDay | 获取星期几(0 ~ 6,0 表示周日) | 没有对应的 setDay | 星期是从日期计算得出的,不能单独设置 |
getHours | 获取小时(0 ~ 23) | setHours | 设置小时,可以同时修改小时、分钟、秒和毫秒 |
getMinutes | 获取分钟(0 ~ 59) | setMinutes | 设置分钟,可以同时修改分钟、秒和毫秒 |
getSeconds | 获取秒(0 ~ 59) | setSeconds | 设置秒,可以同时修改秒和毫秒 |
toLocaleString | 返回当下的年月日时分秒字符串(自动补0) | ||
toLocaleDateString | 返回当下的年月日 | ||
toLocaleTimeString | 返回当下的时分秒 |
示例:
- 修改年份、月份和日期
const date = new Date('2020-01-01');
date.setFullYear(2021); // 修改年份为 2021
date.setMonth(11); // 修改月份为 12 月(11 表示 12 月)
date.setDate(25); // 修改日期为 25 日
console.log(date); // 2021-12-25T00:00:00.000Z
- 修改时间
const date = new Date('2020-01-01T10:30:00');
date.setHours(15); // 修改小时为 15 点
date.setMinutes(45); // 修改分钟为 45 分
date.setSeconds(30); // 修改秒为 30 秒
console.log(date); // 2020-01-01T15:45:30.000Z
- 使用
setTime修改时间戳
const date = new Date();
date.setTime(1609459200000); // 设置时间戳为 2021-01-01T00:00:00.000Z
console.log(date); // Fri Jan 01 2021 00:00:00 GMT+0000
- 获取本地时间
// 1. 实例化
const date = new Date();
// 2. 调用时间对象方法
// 通过方法分别获取年、月、日,时、分、秒
const year = date.getFullYear(); // 四位年份
const month = date.getMonth(); // 0 ~ 11
- 返回今年剩下的天数
var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 设置日和月,注意,月份是 0-11
endYear.setFullYear(today.getFullYear()); // 把年设置为今年
var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //返回今年剩下的天数
什么是ISO 8601格式
const date = new Date('2020-05-01');
就是ISO 8601格式 标准规范式是
YYYY-MM-DDTHH:mm:ss.sssZ
可以确保跨平台的一致性
现在对上面的格式作出解释 例如
const date = new Date('2020-05-01T00:00:00Z');
Z明确表示该时间是协调世界时(UTC)- UTC(零时区)等价于
+00:00 - 如果不用
Z或者+hh:mm的时间字符串,解析时可能使用本地时区 T是日期和时间的分隔符,是ISO 8601标准的一部分T在只有日期没有时间时可以省略,若有时间则不可省略