一、创建日期对象
使用 new Date()
构造函数创建,支持多种初始化方式:
// 1. 获取当前日期时间
let now = new Date();
// 2. 传入时间戳(毫秒数,从1970-01-01 00:00:00 UTC开始)
let date1 = new Date(1620000000000);
// 3. 传入日期字符串(推荐ISO格式)
let date2 = new Date("2023-10-01");
let date3 = new Date("2023-10-01T12:30:00");
// 4. 传入年、月(0-11)、日、时、分、秒
let date4 = new Date(2023, 9, 1, 12, 30, 0); // 2023-10-01 12:30:00
注意:月份参数是 0 基索引(0=1月,11=12月)
二、获取日期时间信息
方法 | 说明 | 返回范围 |
---|---|---|
getFullYear() | 获取年份(4位数) | 如:2023 |
getMonth() | 获取月份 | 0-11(需+1才是实际月份) |
getDate() | 获取日 | 1-31 |
getDay() | 获取星期 | 0-6(0=周日,6=周六) |
getHours() | 获取小时 | 0-23 |
getMinutes() | 获取分钟 | 0-59 |
getSeconds() | 获取秒 | 0-59 |
getMilliseconds() | 获取毫秒 | 0-999 |
getTime() | 获取时间戳(毫秒数) | 如:1696103400000 |
示例:
let date = new Date(2023, 9, 1, 14, 30);
console.log(date.getFullYear()); // 2023
console.log(date.getMonth() + 1); // 10(月份+1)
console.log(date.getDate()); // 1
console.log(date.getDay()); // 0(周日)
三、设置日期时间信息
方法 | 说明 |
---|---|
setFullYear(year) | 设置年份 |
setMonth(month) | 设置月份(0-11) |
setDate(day) | 设置日(1-31) |
setHours(hour) | 设置小时(0-23) |
setMinutes(minute) | 设置分钟(0-59) |
setSeconds(second) | 设置秒(0-59) |
setTime(timestamp) | 通过时间戳设置日期 |
示例:
let date = new Date();
date.setFullYear(2024); // 设置年份为2024
date.setMonth(11); // 设置月份为12月
date.setDate(25); // 设置日为25号
console.log(date); // 2024-12-25 ...
四、日期格式化
JavaScript 没有内置格式化函数,需手动拼接:
function formatDate(date) {
let year = date.getFullYear();
let month = date.getMonth() + 1; // 月份补正
let day = date.getDate();
let hours = date.getHours();
let minutes = date.getMinutes();
let seconds = date.getSeconds();
// 补0处理(确保两位数)
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;
hours = hours < 10 ? '0' + hours : hours;
minutes = minutes < 10 ? '0' + minutes : minutes;
seconds = seconds < 10 ? '0' + seconds : seconds;
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 使用
let now = new Date();
console.log(formatDate(now)); // 2023-10-01 14:30:45
五、日期计算
通过时间戳(毫秒数)进行日期加减计算:
// 1天 = 24*60*60*1000 = 86400000毫秒
let oneDay = 86400000;
let today = new Date();
// 计算明天
let tomorrow = new Date(today.getTime() + oneDay);
// 计算30天后
let nextMonth = new Date(today.getTime() + 30 * oneDay);
// 计算两个日期的差值(天)
let start = new Date("2023-10-01");
let end = new Date("2023-10-10");
let diffTime = end.getTime() - start.getTime();
let diffDays = Math.ceil(diffTime / oneDay); // 9天
六、应用场景
1. 实时时钟
function updateClock() {
let now = new Date();
document.getElementById('clock').textContent = formatDate(now);
}
// 每秒更新
setInterval(updateClock, 1000);
updateClock(); // 初始执行
2. 倒计时功能
let target = new Date(2024, 0, 1); // 目标日期
function updateCountdown() {
let now = new Date();
let diff = target - now; // 毫秒差
let days = Math.floor(diff / 86400000);
let hours = Math.floor((diff % 86400000) / 3600000);
let minutes = Math.floor((diff % 3600000) / 60000);
let seconds = Math.floor((diff % 60000) / 1000);
console.log(`${days}天${hours}时${minutes}分${seconds}秒`);
}
setInterval(updateCountdown, 1000);
七、注意
- 月份问题:
getMonth()
返回 0-11,必须 +1 才能得到实际月份。 - 时区问题:不同时区的日期解析可能有差异,使用时间戳或 ISO 格式字符串。