JavaScript 日期对象备忘录

JavaScript 中的 Date 对象用于处理日期和时间。它提供了创建、操作和格式化日期和时间值的方法。

创建日期

你可以通过多种方式创建 Date 对象:

当前日期和时间:

1
2
const now = new Date();
console.log(now); // Current date and time

具体日期:

1
2
const specificDate = new Date(2019, 10, 21); // Year, Month (0-based), Day
console.log(specificDate); // Thu Nov 21 2019

来自字符串:

1
2
const fromString = new Date("2019-11-21T10:00:00");
console.log(fromString); // Thu Nov 21 2019 10:00:00 GMT

来自时间戳(自 Unix 纪元以来的毫秒数):

1
2
const fromTimestamp = new Date(1574899200000);
console.log(fromTimestamp); // Thu Nov 28 2019 10:00:00 GMT

常用方法

获取日期和时间

方法 描述 示例
getFullYear() 返回年份 date.getFullYear() -> 2019
getMonth() 返回月份 (0-11) date.getMonth() -> 10 (十一月)
getDate() 返回月份中的日期 (1-31) date.getDate() -> 21
getDay() 返回星期几 (0-6,星期日=0) date.getDay() -> 4 (星期四)
getHours() 返回小时 (0-23) date.getHours() -> 10
getMinutes() 返回分钟 (0-59) date.getMinutes() -> 0
getSeconds() 返回秒 (0-59) date.getSeconds() -> 0
getTime() 返回以毫秒为单位的时间戳 date.getTime() -> 1732231200000

设置日期和时间

方法 描述 示例
setFullYear(year) 设置年份 date.setFullYear(2025)
setMonth(month) 设置月份 (0-11) date.setMonth(0) -> 一月
setDate(day) 设置月份中的日期 date.setDate(1) -> 月份中的第一天
setHours(hour) 设置小时 (0-23) date.setHours(12)
setMinutes(minutes) 设置分钟 (0-59) date.setMinutes(30)
setSeconds(seconds) 设置秒 (0-59) date.setSeconds(45)

格式化日期

方法 描述 示例
toDateString() 返回日期为人类可读的字符串 date.toDateString() -> “Thu Nov 21 2019”
toISOString() 返回 ISO 格式的日期 date.toISOString() -> “2019-11-21T10:00:00.000Z”
toLocaleDateString() 返回本地化格式的日期 date.toLocaleDateString() -> “11/21/2019”
toLocaleTimeString() 返回本地化格式的时间 date.toLocaleTimeString() -> “10:00:00 AM”

常见用例

计算两个日期之间的天数:

1
2
3
4
5
const startDate = new Date("2019-11-01");
const endDate = new Date("2019-11-21");
const diffInTime = endDate - startDate; // Difference in milliseconds
const diffInDays = diffInTime / (1000 * 60 * 60 * 24); // Convert to days
console.log(diffInDays); // 20

倒计时器:

1
2
3
4
5
6
7
8
9
10
const targetDate = new Date("2019-12-31T23:59:59");
setInterval(() => {
const now = new Date();
const timeLeft = targetDate - now; // Milliseconds left
const days = Math.floor(timeLeft / (1000 * 60 * 60 * 24));
const hours = Math.floor((timeLeft / (1000 * 60 * 60)) % 24);
const minutes = Math.floor((timeLeft / (1000 * 60)) % 60);
const seconds = Math.floor((timeLeft / 1000) % 60);
console.log(`${days}d ${hours}h ${minutes}m ${seconds}s`);
}, 1000);

格式化当前日期:

1
2
3
const now = new Date();
const formatted = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;
console.log(formatted); // "2019-11-21"

查找星期几:

1
2
3
4
5
6
7
8
9
10
11
const date = new Date("2019-11-21");
const days = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
];
console.log(days[date.getDay()]); // "Thursday"

检查闰年:

1
2
3
4
const isLeapYear = (year) => {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
};
console.log(isLeapYear(2019)); // true

添加/减去天数:

1
2
3
4
5
6
const addDays = (date, days) => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
console.log(addDays(new Date(), 10)); // Adds 10 days to the current date

专业提示

  • 使用 Date.now() 直接获取当前时间戳,而无需创建 Date 对象:
1
console.log(Date.now()); // Timestamp in milliseconds
  • 处理跨地区的日期时,请注意时区。使用 Moment.js 或 Day.js 等库进行高级处理。

  • 为避免月份差一错误,请记住月份是从 0 开始的(0 = 一月,11 = 十二月)。