术语
- 时间单位
- 年(year)
- 月(month)
- 日(date)
- 小时(hour)
- 分钟(minute)
- 秒(second) = 1000ms
- 毫秒(millisecond,ms) = 1000 us
- 微秒(microsecond,us) = 1000 ns
- 纳秒(nanosecond,ns)
- UTC和GMT
- 世界划分为24个时区,北京在东8区,格林威治在0时区。
- GMT:Greenwish Mean Time 格林威治世界时。太阳时,精确到毫秒。
- UTC:Universal Time Coodinated 世界协调时。以原子时间为计时标准,精确到纳秒。
- UTC和GMT之间误差不超过0.9秒
- GMT+0800 东8区
- 时间戳
- 数字
- 1970-1-1 凌晨 到 某个时刻 所经过的毫秒数
Date Object
创建时间对象
直接调用函数,忽略所有参数,直接返回当前时间的字符串。
Date(); // => 'Mon Oct 25 2021 13:49:33 GMT+0800 (中国标准时间)'
使用 new 关键字来调用 Date 构造函数,将返回一个日期对象。
new Date()
:创建日期对象
- 无参,表示当前时间;
- 1个参数,参数为数字,表示传入的是时间戳;
- 两个参数以上,分别表示:年、月、日、时、分、秒、毫秒
- 注意:月份的数字从0开始计算。
- 如果缺失参数,日期部分默认为 1,时分秒毫秒默认为 0。
- 月、日、时、分、秒、毫秒,均可以传递负数,如果传递负数,会根据指定日期进行计算。
实例成员
- getDate方法:得到日期部分
- getDay方法:得到星期几,0表示星期天
- getFullYear方法:得到年份
- getHours方法:得到小时部分
- getMinutes方法:得到分钟部分
- getSeconds方法:得到秒部分
- getMilliseconds方法:得到毫秒部分
- getTime方法:得到时间戳
- getMonth方法:得到月,从0开始计算
- setDate方法:设置日期
- setMonth方法:设置月份
- setFullYear方法:设置年
- setMinutes方法
- setSeconds方法
- setMilliseconds方法
- setTime方法:重新设置时间戳
- toDateString方法:将日期部分转换为可读的字符串。
- toISOString方法:将整个对象转换为ISO标准的字符串格式。
- toLocaleDateString方法:根据当前系统的地区设置,将日期部分转换为可读的字符串
- toLocaleString方法:根据当前系统的地区设置,将整个日期对象转换为可读的字符串
- toLocaleTimeString方法:根据当前系统的地区设置,将时间部分转换为可读的字符串
日期的运算
日期对象重写了 Object 中的 valueOf 方法,返回的是一个数字,表示时间戳。因此,日期对象可以进行数学运算。可以进行数学运算,意味着:我们可以比较两个日期对象的大小(因为会自动调用 valueOf 方法,得到它们的时间戳,再进行比较),可以直接计算天数:日期对象 ÷ 24 * 60 * 60 * 1000
(每小时 60 分,每分 60秒,每秒 1000毫秒)。
codes
- 1.js
Date(); // => Mon Oct 25 2021 13:53:14 GMT+0800 (中国标准时间)
new Date(); // => Mon Oct 25 2021 13:54:27 GMT+0800 (中国标准时间)
new Date(1000); // => Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间)
new Date(-1000); // => Thu Jan 01 1970 07:59:59 GMT+0800 (中国标准时间)
new Date(2015, 5, 1, 13, 14, 15, 200); // Mon Jun 01 2015 13:14:15 GMT+0800 (中国标准时间)
new Date(2015, 5); // Mon Jun 01 2015 00:00:00 GMT+0800 (中国标准时间)
new Date(2015, 0, 1); // Thu Jan 01 2015 00:00:00 GMT+0800 (中国标准时间)
new Date(2015, 0, 0); // 提前 1 天 => Wed Dec 31 2014 00:00:00 GMT+0800 (中国标准时间)
new Date(2015, 0, -1); // 提前 2 天 => Tue Dec 30 2014 00:00:00 GMT+0800 (中国标准时间)
/* 注意:
这里传入的时间是北京时间,因为将格林威治时间转换成了北京时间 所以在初始时间的基础上 加了 8 小时。
月份的数字从 0 开始计算,日期是从1开始的。
如果缺失参数,日期部分默认为 1,时分秒毫秒默认为 0。
月、日、时、分、秒、毫秒,均可以传递负数,如果传递负数,会根据指定日期进行计算。
*/
- 2.js
var d = new Date();
// get
d.getDate(); // => 15
d.getDay(); // => 2 => 周三
d.getFullYear(); // => 2020
d.getHours(); // => 19 => 晚上7点
d.getMinutes(); // => 48 => 48分
d.getSeconds(); // => 10 => 10秒
d.getMilliseconds(); // => 588 => 588毫秒
d.getTime(); // => 1600170490588
d.getMonth(); // => 8 => 9月
- 3.js
var d = new Date();
d; // => Tue Sep 15 2020 19:51:31 GMT+0800 (中国标准时间)
d.setDate(14); // 1600084394946 设置日期,返回的是一个时间戳。
d; // Mon Sep 14 2020 19:53:14 GMT+0800 (中国标准时间)
/*
setMonth
setFullYear
setMinutes
setSeconds
setMilliseconds
setTime
*/
- 4.js
// 转换为字符串
var d = new Date();
d.toDateString(); // => 将日期部分转换为可读的字符串 => Tue Sep 15 2020
d.toISOString(); // => 将整个对象转换为 ISO 标准的字符串格式 => 2020-09-15T11:57:53.979Z
d.toLocaleDateString(); // => 根据当前系统的地区设置,将日期部分转换为可读的字符串 => 2020/9/15
d.toLocaleString(); // => 根据当前系统的地区设置,将整个日期对象转换为可读的字符串 => 2020/9/15 下午7:57:53
d.toLocaleTimeString(); // => 根据当前系统的地区设置,将时间部分转换为可读的字符串 => 下午7:57:53
- 5.js
/*
日期的运算
日期对象重写了 Object 中的 valueOf 方法,返回的是一个数字,表示时间戳。
因此,日期对象可以进行数学运算。
示例:加 1 天
*/
// 正确写法
var d = new Date();
d; // => Tue Sep 15 2020 20:11:38 GMT+0800 (中国标准时间)
d.setTime(d.valueOf() + 24 * 60 * 60 * 1000); //
d; // => Wed Sep 16 2020 20:11:38 GMT+0800 (中国标准时间)
// 错误写法
var d = new Date();
d; // => Tue Sep 15 2020 20:11:38 GMT+0800 (中国标准时间)
d.setTime(d.getDate() + 1); // d.getDate() + 1 ==> 16
d; // => Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
练习
- 编写一个函数,用于返回一个友好的日期字符串格式
年-月-日 时:分:秒 - 给定用户的生日(年、月、日),计算该用户的年龄
- 扩展:计算还有多少天过生日
- 根据系统当前的月份,输出这一个月每一天的星期
2019年6月1日:星期六
2019年6月2日:星期日
…..
2019年6月30日:星期日
提示:如何获取某个月的天数?
示例:获取 2021 年 2 月份的天数:new Date(2021, 2, 0).getDate(); // => 28
日期是从 1 开始算的,若传入的日期部分是 0,那么表示上个月的最后一天。