Skip to content

Date构造函数

术语

  1. 时间单位

年(year) 月(month) 日(date) 小时(hour) 分钟(minute) 秒(second) = 1000ms 毫秒(millisecond,ms) = 1000 us 微秒(microsecond,us) = 1000 ns 纳秒(nanosecond,ns)

  1. UTC和GMT

世界划分为24个时区,北京在东8区,格林威治在0时区。

GMT:Greenwish Mean Time 格林威治世界时。太阳时,精确到毫秒。 UTC:Universal Time Coodinated 世界协调时。以原子时间为计时标准,精确到纳秒。

UTC和GMT之间误差不超过0.9秒

GMT+0800 东8区

  1. 时间戳

数字

1970-1-1 凌晨 到 某个时间 所经过的毫秒数

创建时间对象

  • 直接调用函数(不适用new),忽略所有参数,直接返回当前时间的字符串。
  • new Date(): 创建日期对象
  1. 无参,当前时间
  2. 1个参数,参数为数字,表示传入的是时间戳 new Date(19236)
  3. 两个参数以上,分别表示:年、月、日、时、分、秒、毫秒 new Date(2026,3,22,9,50,10,23)

注意:月份的数字从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方法,返回的是一个数字,表示时间戳

因此,日期对象可以进行数学运算

运用数学运算,可以对某个日期进行加减

练习

  1. 编写一个函数,用于返回一个友好的日期字符串格式
js
// 年-月-日 时:分:秒
function getDateString(date) {
    var year = date.getFullYear().toString().padStart(4, "0");
    var month = (date.getMonth() + 1).toString().padStart(2, "0");
    var day = date.getDate().toString().padStart(2, "0");

    var hour = date.getHours().toString().padStart(2, "0");
    var minute = date.getMinutes().toString().padStart(2, "0");
    var second = date.getSeconds().toString().padStart(2, "0");

    return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}

console.log(getDateString(new Date()));
  1. 给定用户的生日(年、月、日),计算该用户的年龄
js
function getAge (year, month, day) {
    //得到当前日期
    var now = new Date(2016, 1, 28);
    var dec = now.getFullYear() - year;
    //处理闰年
    if (month === 2 && day === 29 && !this.isLeap(now.getFullYear())) {
        day = 28;
    }
    //得到今年的生日
    var birthdayThisYear = new Date(now.getFullYear(), month - 1, day);
    if (birthdayThisYear > now) {
        dec--;
    }
    return dec;
},
  1. 根据系统当前的月份,输出这一个月每一天的星期
js
//打印当前月每一天的星期
function print() {
    var now = new Date();
    var m = now.getMonth() + 1;
    //得到这一年,这一月的天数
    var y = now.getFullYear();
    var days = new Date(y, m, 0).getDate();
    for (var i = 1; i <= days; i++) {
        console.log(`${y}年${m}月${i}日:星期${getDayOfWeek(y, m, i)}`);
    }
}

function getDayOfWeek(year, month, day) {
    var d = new Date(year, month - 1, day);
    var day = d.getDay(); //得到星期
    switch (day) {
        case 0:
            return "日";
        case 1:
            return "一";
        case 2:
            return "二";
        case 3:
            return "三";
        case 4:
            return "四";
        case 5:
            return "五";
        case 6:
            return "六";
    }
}

print();
  1. 计算还有多少天过生日
js
function getDaysToBirthday(month, day) {
    var now = new Date();
    var thisYear = now.getFullYear();
    // 今年的生日
    var birthday = new Date(thisYear, month - 1, day);
    if (birthday < now) {
        birthday.setFullYear(now.getFullYear() + 1);
    }
    var timeDec = birthday - now;
    var days = timeDec / (24 * 60 * 60 * 1000);
    return Math.ceil(days);
}

console.log(getDaysToBirthday(8, 27));

MIT License