思路:创建一个函数,输入年月日,先创建一个时间对象,然后利用set方法将输入的年月日设置给时间对象,然后根据输入的月份,利用for循环,增加每一个月的天数,从一月增加到当前月的上一个月,最后再将日数加在一起,输出即可。
代码如下:
function getDays(year, month, date) {
var d = new Date()
d.setFullYear(year)
d.setMonth(month - 1) // 0~11
d.setDate(date)
var y = d.getFullYear()
var m = d.getMonth() // 0~11
var d2 = d.getDate()
var days = 0
for (var i = 1; i <= m; i++) {
if (m === 2) {
if (y % 4 === 0 && y % 100 !== 0 || y % 400 === 0) {
days += 29
} else {
days += 28
}
} else {
if (m === 1 || m === 3 || m === 5 || m === 7 || m === 8 || m === 10 || m === 12) {
days += 31
} else {
days += 30
}
}
}
days += d2
console.log(`${d.toLocaleString()}是${y}年当中的第${days}天`);
}
解释:
第2行:创建一个日期对象。
第3~5行:设置时间对象。
第6~8行:取出时间对象的值。
第9行:声明一个变量,用于存储总共的天数。
第10~24行:用for循环,计算当前月份上一个月份前的所有天数和。注意,由于get方法取出的月份值m大小范围是0~11,因此for循环直接遍历到m,就是当前月份的前一个月。其中运营的算法是if判断,符合月份的则增加对应的天数,遇到闰年二月为29天,所以要先判断是否为二月,然后判断是否为闰年。
第25行:再加上当前月份的天数,也就日值。
第26行:模板字符串拼接。
代码演示:
getDays(2023, 3, 6)
输出:
2023/3/6 23:12:09是2023年当中的第62天