Date构造函数
术语
- 时间单位
年(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 凌晨 到 某个时间 所经过的毫秒数
创建时间对象
- 直接调用函数(不适用new),忽略所有参数,直接返回当前时间的字符串。
- new Date(): 创建日期对象
- 无参,当前时间
- 1个参数,参数为数字,表示传入的是时间戳 new Date(19236)
- 两个参数以上,分别表示:年、月、日、时、分、秒、毫秒 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方法,返回的是一个数字,表示时间戳
因此,日期对象可以进行数学运算
运用数学运算,可以对某个日期进行加减
练习
- 编写一个函数,用于返回一个友好的日期字符串格式
// 年-月-日 时:分:秒
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()));- 给定用户的生日(年、月、日),计算该用户的年龄
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;
},- 根据系统当前的月份,输出这一个月每一天的星期
//打印当前月每一天的星期
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();- 计算还有多少天过生日
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));