Date.getDay() 在 JavaScript 中返回错误的日期
使用 getDate()
方法而不是 getDay()
来获取一个月中某天的正确值,例如 date.getDate()
。
getDate
方法返回一个介于 1 和 31 之间的数字,表示给定日期是一个月中的第几天。
const date = new Date('2022-04-24');
console.log(date); // 👉️ Sun Apr 24 2022
const dayOfMonth = date.getDate();
console.log(dayOfMonth); // 👉️ 24
我们使用 Date()
构造函数创建了一个日期,用于存储 2022 年 4 月 24 日的值。
getDate()
方法返回存储在特定 Date 对象中的月份中的第几天。
该方法经常与 getDay() 混淆。
getDay
方法返回一个介于 0 和 6 之间的数字,它对应于给定日期的星期几。
例如,0 是星期日,1 是星期一,2 是星期二,等等。
const date = new Date('2022-04-24');
console.log(date); // 👉️ Sun Apr 24 2022
// ❌ getDay = zero-based day of week
const dayOfWeek = date.getDay();
console.log(dayOfWeek); // 👉️ 0
另一个令人困惑的与日期相关的方法是 getMonth()
。
该方法为给定日期的月份返回一个从零开始的数字,其中 0 是一月,1 是二月,2 是三月,等等。
下面是一个将日期格式化为 YYYY-MM-DD
的示例。
function padTo2Digits(num) {
return num.toString().padStart(2, '0');
}
function formatDate(date) {
return [
date.getFullYear(),
padTo2Digits(date.getMonth() + 1),
padTo2Digits(date.getDate()),
].join('-');
}
const date = new Date('2022-04-24');
// 👇️ 2022-04-24 (yyyy-mm-dd)
console.log(formatDate(date));
// 👇️️ 2025-05-09 (yyyy-mm-dd)
console.log(formatDate(new Date(2025, 4, 9)));
我们做的第一件事是创建一个 padTo2Digits
函数,如果月份或日期仅包含一位数字(小于 10),它将负责添加前导零。
function padTo2Digits(num) {
return num.toString().padStart(2, '0');
}
console.log(padTo2Digits(3)); // 👉️ '03'
console.log(padTo2Digits(6)); // 👉️ '06'
console.log(padTo2Digits(10)); // 👉️ '10'
我们要确保结果始终一致并且月份和日期为 2 位数字,因此我们使用了 padStart
方法。
我们传递给
padTo2Digits
函数的第一个参数是字符串的总长度,因此如果日期或月份已经有 2 位数字,它就不会填充它们。
接下来,我们创建了一个接受日期并将其格式化为 yyyy-mm-dd 的函数。
该函数使用以下 3 个与日期相关的方法。
- Date.getFullYear 方法 - 返回代表与日期对应的年份的四位数字。
- Date.getMonth - 返回一个介于 0(一月)和 11(十二月)之间的整数,代表给定日期的月份。 是的,不幸的是,getMonth 方法关闭了 1。
- Date.getDate - 返回一个介于 1 和 31 之间的整数,表示特定日期的月份中的第几天。
getMonth
方法返回一个从零开始的月份索引,从 0 到 11,这意味着一月是 0,十二月是 11。
因为 getMonth
方法是从零开始的,所以我们将 1 添加到它的返回值。
最后一步是将对方法的调用放在一个数组中,这样我们就可以用连字符分隔符连接它们。 这里有些例子。
console.log(['2022', '04', '24'].join('-')); // 👉️ '2022-04-24'
console.log(['2024', '09', '15'].join('-')); // 👉️ '2024-09-15'
我们在示例中使用了连字符分隔符,但是,我们可以使用正斜杠 /
、重新排序值或进行任何其他更改。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
如何在 JavaScript 中合并两个数组而不出现重复的情况
发布时间:2024/03/23 浏览次数:86 分类:JavaScript
-
本教程介绍了如何在 JavaScript 中合并两个数组,以及如何删除任何重复的数组。