Date对象是JavaScript中表示时间和日期的对象之一,它可以存储从1970年1月1日00:00:00(标准时间,也称为Epoch时间)到现在的毫秒数,并提供了很多方法来获取和操作日期和时间。在本文中,我们将从多个角度分析Date对象。
1. 创建Date对象
可以用以下几种方式来创建一个Date对象:
1)不带参数,这会创建一个包含当前时间的Date对象:
```
const now = new Date();
console.log(now); // 例如:2021-04-22T07:56:25.284Z
```
2)传入一个时间戳,可以是一个整数或一个字符串表示的整数,这会返回对应的Date对象:
```
const timestamp = 1619098584567;
const fromTimestamp = new Date(timestamp);
console.log(fromTimestamp); // 例如:2021-04-22T07:49:44.567Z
```
3)传入一个字符串,这个字符串可以是以下格式:
- ISO格式:`2021-04-22T07:56:25.284Z`
- 简化ISO格式:`2021-04-22T07:56:25Z`
- 带时区的ISO格式:`2021-04-22T07:56:25.284+08:00`
- RFC2822格式:`Thu, 22 Apr 2021 07:56:25 GMT`
- 带时区的RFC2822格式:`Thu, 22 Apr 2021 07:56:25 +0800`
- 其他自定义格式
```
const fromString = new Date('2021-04-22T07:56:25.284Z');
console.log(fromString); // 例如:2021-04-22T07:56:25.284Z
```
2. 获取Date对象的时间部分
Date对象提供了多个方法来获取其表示的时间的不同部分,例如:
- `getFullYear()`:获取年份(4位整数)
- `getMonth()`:获取月份(0~11,0表示一月)
- `getDate()`:获取日期(1~31)
- `getDay()`:获取星期几(0~6,0表示星期日)
- `getHours()`:获取小时数(0~23)
- `getMinutes()`:获取分钟数(0~59)
- `getSeconds()`:获取秒数(0~59)
- `getMilliseconds()`:获取毫秒数(0~999)
以上方法返回的都是本地时间,也就是根据浏览器所在时区计算的结果。如果要获取UTC时间,可以用相应的方法名前加上`UTC`前缀,例如`getUTCHours()`。
```
const now = new Date();
console.log(now.getFullYear()); // 2021
console.log(now.getMonth()); // 3(4月)
console.log(now.getDate()); // 22
console.log(now.getDay()); // 4(星期四)
console.log(now.getHours()); // 7
console.log(now.getMinutes()); // 56
console.log(now.getSeconds()); // 25
console.log(now.getMilliseconds()); // 284
```
3. 操作Date对象的时间部分
Date对象还提供了多个方法来操作其表示的时间的不同部分,例如:
- `setFullYear(year[, month[, date]])`:设置年份,可以同时设置月份和日期
- `setMonth(month[, date])`:设置月份,可以同时设置日期
- `setDate(date)`:设置日期
- `setHours(hour[, min[, sec[, ms]]])`:设置小时数,可以同时设置分钟数、秒数和毫秒数
- `setMinutes(min[, sec[, ms]])`:设置分钟数,可以同时设置秒数和毫秒数
- `setSeconds(sec[, ms])`:设置秒数,可以同时设置毫秒数
- `setMilliseconds(ms)`:设置毫秒数
以上方法都会改变原有对象,并返回改变后的毫秒数。同样,如果要操作UTC时间,可以用相应的方法名前加上`UTC`前缀。
```
const now = new Date();
now.setFullYear(2022);
console.log(now); // 例如:2022-04-22T07:56:25.284Z
```
4. 计算时间差
Date对象也可以用来计算两个时间之间的差距,这可以用以下两种方式实现:
- 通过减法运算得到毫秒数的差距,然后将差距转换为需要的单位。例如,计算两个时间之间相差的天数:
```
const start = new Date('2021-04-01');
const end = new Date('2021-04-22');
const diff = end.getTime() - start.getTime();
const days = diff / (1000 * 60 * 60 * 24);
console.log(days); // 21
```
- 通过Date对象提供的方法直接计算。例如,获取两个时间之间相差的秒数:
```
const start = new Date('2021-04-01T00:00:00.000Z');
const end = new Date('2021-04-22T07:56:25.284Z');
const diffSeconds = (end - start) / 1000;
console.log(diffSeconds); // 1811975.284
```
5. 其他操作
除了上述操作外,Date对象还有一些其他常用的方法,例如:
- `getTimezoneOffset()`:获取当前时区相对于UTC的分钟数差距(正表示比UTC晚,负表示比UTC早)
- `toJSON()`:返回一个带有ISO格式的日期字符串,可以直接用于JSON序列化
- `toString()`:返回一个表示日期和时间的字符串,一般格式为`ddd mmm dd yyyy HH:MM:SS GMT(±zzzz)`,其中`ddd`是星期几的缩写,`mmm`是月份的缩写,`zzzz`是与UTC的时差
```
const now = new Date();
console.log(now.getTimezoneOffset()); // -480(相当于UTC+8)
console.log(now.toJSON()); // "2021-04-22T07:56:25.284Z"
console.log(now.toString()); // "Thu Apr 22 2021 15:56:25 GMT+0800 (China Standard Time)"
```
综上所述,Date对象在JavaScript中具有重要的作用,并提供了多种常用的方法来获取和操作日期和时间。