术语

  • 时间单位
    • 年(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

创建时间对象

直接调用函数,忽略所有参数,直接返回当前时间的字符串。

  1. 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
  1. Date(); // => Mon Oct 25 2021 13:53:14 GMT+0800 (中国标准时间)
  2. new Date(); // => Mon Oct 25 2021 13:54:27 GMT+0800 (中国标准时间)
  3. new Date(1000); // => Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间)
  4. new Date(-1000); // => Thu Jan 01 1970 07:59:59 GMT+0800 (中国标准时间)
  5. new Date(2015, 5, 1, 13, 14, 15, 200); // Mon Jun 01 2015 13:14:15 GMT+0800 (中国标准时间)
  6. new Date(2015, 5); // Mon Jun 01 2015 00:00:00 GMT+0800 (中国标准时间)
  7. new Date(2015, 0, 1); // Thu Jan 01 2015 00:00:00 GMT+0800 (中国标准时间)
  8. new Date(2015, 0, 0); // 提前 1 天 => Wed Dec 31 2014 00:00:00 GMT+0800 (中国标准时间)
  9. new Date(2015, 0, -1); // 提前 2 天 => Tue Dec 30 2014 00:00:00 GMT+0800 (中国标准时间)
  10. /* 注意:
  11. 这里传入的时间是北京时间,因为将格林威治时间转换成了北京时间 所以在初始时间的基础上 加了 8 小时。
  12. 月份的数字从 0 开始计算,日期是从1开始的。
  13. 如果缺失参数,日期部分默认为 1,时分秒毫秒默认为 0。
  14. 月、日、时、分、秒、毫秒,均可以传递负数,如果传递负数,会根据指定日期进行计算。
  15. */
  • 2.js
  1. var d = new Date();
  2. // get
  3. d.getDate(); // => 15
  4. d.getDay(); // => 2 => 周三
  5. d.getFullYear(); // => 2020
  6. d.getHours(); // => 19 => 晚上7点
  7. d.getMinutes(); // => 48 => 48分
  8. d.getSeconds(); // => 10 => 10秒
  9. d.getMilliseconds(); // => 588 => 588毫秒
  10. d.getTime(); // => 1600170490588
  11. d.getMonth(); // => 8 => 9月
  • 3.js
  1. var d = new Date();
  2. d; // => Tue Sep 15 2020 19:51:31 GMT+0800 (中国标准时间)
  3. d.setDate(14); // 1600084394946 设置日期,返回的是一个时间戳。
  4. d; // Mon Sep 14 2020 19:53:14 GMT+0800 (中国标准时间)
  5. /*
  6. setMonth
  7. setFullYear
  8. setMinutes
  9. setSeconds
  10. setMilliseconds
  11. setTime
  12. */
  • 4.js
  1. // 转换为字符串
  2. var d = new Date();
  3. d.toDateString(); // => 将日期部分转换为可读的字符串 => Tue Sep 15 2020
  4. d.toISOString(); // => 将整个对象转换为 ISO 标准的字符串格式 => 2020-09-15T11:57:53.979Z
  5. d.toLocaleDateString(); // => 根据当前系统的地区设置,将日期部分转换为可读的字符串 => 2020/9/15
  6. d.toLocaleString(); // => 根据当前系统的地区设置,将整个日期对象转换为可读的字符串 => 2020/9/15 下午7:57:53
  7. d.toLocaleTimeString(); // => 根据当前系统的地区设置,将时间部分转换为可读的字符串 => 下午7:57:53
  • 5.js
  1. /*
  2. 日期的运算
  3. 日期对象重写了 Object 中的 valueOf 方法,返回的是一个数字,表示时间戳。
  4. 因此,日期对象可以进行数学运算。
  5. 示例:加 1 天
  6. */
  7. // 正确写法
  8. var d = new Date();
  9. d; // => Tue Sep 15 2020 20:11:38 GMT+0800 (中国标准时间)
  10. d.setTime(d.valueOf() + 24 * 60 * 60 * 1000); //
  11. d; // => Wed Sep 16 2020 20:11:38 GMT+0800 (中国标准时间)
  12. // 错误写法
  13. var d = new Date();
  14. d; // => Tue Sep 15 2020 20:11:38 GMT+0800 (中国标准时间)
  15. d.setTime(d.getDate() + 1); // d.getDate() + 1 ==> 16
  16. d; // => Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)

练习

  1. 编写一个函数,用于返回一个友好的日期字符串格式
    年-月-日 时:分:秒
  2. 给定用户的生日(年、月、日),计算该用户的年龄
    • 扩展:计算还有多少天过生日
  3. 根据系统当前的月份,输出这一个月每一天的星期
    2019年6月1日:星期六
    2019年6月2日:星期日
    …..
    2019年6月30日:星期日
    提示:如何获取某个月的天数?
    示例:获取 2021 年 2 月份的天数:new Date(2021, 2, 0).getDate(); // => 28
    日期是从 1 开始算的,若传入的日期部分是 0,那么表示上个月的最后一天。