Skip to content

JavaScript 日期方法

JavaScript 的内置 Date 对象提供了用于处理日期和时间的方法。这些方法允许您检索(获取)和修改(设置)日期的各个组成部分,例如年、月、日、时、分、秒和毫秒。

获取方法用于检索日期的各个部分。以下是一些最常用的方法:

MethodDescription
getDate()获取月份中的日期(1-31 的数字)
getDay()获取星期几(0-6 的数字,其中 0 表示星期日,6 表示星期六)
getFullYear()获取年份(四位数字,yyyy)
getHours()获取小时(0-23)
getMilliseconds()获取毫秒(0-999)
getMinutes()获取分钟(0-59)
getMonth()获取月份(0-11 的数字,其中 0 表示一月,11 表示十二月)
getSeconds()获取秒(0-59)
getTime()获取自 1970 年 1 月 1 日 UTC(Unix Epoch)以来经过的毫秒数

getTime() 返回自协调世界时(UTC)1970 年 1 月 1 日午夜以来经过的毫秒数。这个值通常被称为时间戳(timestamp)。

const d = new Date();
const timeInMs = d.getTime();
console.log(timeInMs); // 示例:1678886400000(会因时间而异)

这个方法对于比较日期或计算时间差非常有用。

getFullYear() 返回日期的年份,以四位数字表示:

const d = new Date(); // 默认为当前日期和时间
const year = d.getFullYear();
console.log(year); // 示例:2023(如果当前年份是 2023)

getDay() 返回星期几,以数字表示(0-6):

const d = new Date(); // 示例:如果今天是星期三
const dayOfWeek = d.getDay();
console.log(dayOfWeek); // 输出将是 3(因为星期日=0,星期一=1,...)

重要提示:在 JavaScript 中,getDay() 返回 0 表示星期日,1 表示星期一,依此类推,直到 6 表示星期六。这可能与某些地区将星期一视为一周第一天的惯例不同。

您可以将一个名称数组与 getDay() 一起使用,以返回星期几的名称:

const d = new Date();
const dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
const currentDayName = dayNames[d.getDay()];
console.log(`Today is ${currentDayName}.`); // 示例:“今天是星期三。”

设置方法用于修改日期的各个部分。以下是一些常用的方法:

MethodDescription
setDate()设置月份中的日期(1-31)
setFullYear()设置年份(可选地,也可设置月份和日期)
setHours()设置小时(0-23)
setMilliseconds()设置毫秒(0-999)
setMinutes()设置分钟(0-59)
setMonth()设置月份(0-11,其中 0 是一月)
setSeconds()设置秒(0-59)
setTime()使用自 Epoch(1970 年 1 月 1 日 UTC)以来经过的毫秒数设置日期和时间

setFullYear() 修改 Date 对象的年份。您也可以可选地设置月份和日期。请记住,月份是基于 0 的索引(一月是 0)。

const d = new Date(); // 创建一个包含当前日期和时间的 Date 对象
d.setFullYear(2025, 0, 14); // 设置年份为 2025,月份为一月 (0),日期为 14
console.log(d.toDateString()); // 示例:“Tue Jan 14 2025”

setDate() 设置月份中的日期(1-31):

const d = new Date(); // 示例:当前日期是 2024 年 3 月 15 日
d.setDate(20);
console.log(d.toDateString()); // 输出:“Wed Mar 20 2024”(如果当前月份/年份允许 20 日)

setDate() 方法也可以用于从日期中添加或减去天数:

const d = new Date(); // 当前日期
console.log(`Original date: ${d.toDateString()}`);
d.setDate(d.getDate() + 50); // 向当前日期添加 50 天
console.log(`Date after 50 days: ${d.toDateString()}`);

注意:如果设置日期(或添加/减去天数)导致值超出当前月份的有效范围(例如,为四月设置 32 日),则 Date 对象会自动相应地调整月份和年份。

JavaScript 可以解析日期字符串来创建 Date 对象。Date.parse() 静态方法尝试解析日期的字符串表示,并返回自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数,如果解析失败则返回 NaN。

const dateString = "March 21, 2012";
const milliseconds = Date.parse(dateString);
console.log(milliseconds); // 示例:1332288000000(如果未明确指定时区,值可能取决于时区解释)

Date.parse() 方法有其局限性,并且其对各种字符串格式的处理在不同浏览器中可能不一致。通常建议在使用 Date.parse() 或带有单个字符串参数的 Date 构造函数时,传入 ISO 8601 格式的日期字符串(例如,YYYY-MM-DDTHH:mm:ss.sssZ),以确保可靠的解析。

或者,您通常可以直接将日期字符串传递给 Date 构造函数:

const isoDateString = "2024-03-15T10:00:00Z"; // ISO 8601 格式 (UTC)
const dateFromISO = new Date(isoDateString);
console.log(dateFromISO.toUTCString());
// 使用特定组件构造(月份是基于 0 的索引!)
const specificDate = new Date(2024, 2, 15, 12, 30, 0); // 2024 年 3 月 15 日,12:30:00 本地时间
console.log(specificDate.toLocaleString());

然后您可以使用毫秒数(来自 Date.parse() 或 getTime())来创建一个新的日期对象:

const millisecondsSinceEpoch = 1332288000000; // 来自 Date.parse() 或其他来源
const dateObject = new Date(millisecondsSinceEpoch);
console.log(dateObject.toUTCString()); // 示例:“Wed, 21 Mar 2012 00:00:00 GMT”

可以使用比较运算符(<, >, <=, >=)直接比较 Date 对象。但是,这比较的是它们的毫秒表示。为了清晰起见,通常最好显式比较来自 getTime() 的值。

以下示例将今天的日期与 2100 年 1 月 14 日进行比较:

const today = new Date();
const someday = new Date();
someday.setFullYear(2100, 0, 14); // 2100 年 1 月 14 日(月份 0 是一月)
let comparisonResult;
if (someday.getTime() > today.getTime()) {
comparisonResult = "Today is before January 14, 2100.";
} else if (someday.getTime() < today.getTime()) {
comparisonResult = "Today is after January 14, 2100.";
} else {
comparisonResult = "Today is January 14, 2100.";
}
console.log(comparisonResult);

提醒:在处理 JavaScript Date 对象中的月份时(例如,在 Date 构造函数或使用 setMonth()/getMonth() 时),一月表示为 0,十二月表示为 11。这是常见的“差一”错误来源。

有关所有 Date 对象属性和方法的全面且最新的参考,请查阅 MDN Web 文档中的 JavaScript Date。 (示例:搜索 ‘MDN Date JavaScript’)。

这个资源提供了所有与 Date 相关功能的详细描述、语法和示例。