// 创建函数getDays,传递任意一个日期,返回这个日期是一年的第几天
// 方法1 直接用时间戳相减,不用看是否是闰年
function getDays(n) {
// 时间转为系统存储格式
var t1 = new Date(n);
// console.log(t1) //2020-09-30T16:00:00.000Z
// 转时间戳 getTime() 换算为毫秒数
var t2 = t1.getTime() / 1000
// console.log(t2); //1601481600
var y1 = t1.getFullYear()
// console.log(y1) //2022
var y2 = new Date(y1, 0, 1) // 0是月份的下标,代表1月
// console.log(y2) //2021-12-30T16:00:00.000Z
// 年份转时间戳 getTime() 换算为毫秒数
var y3 = y2.getTime() / 1000
// console.log(y3) //1580486400
var total = t2 - y3
// console.log(total) // 20995200
var day = parseInt(total / (60 * 60 * 24))+1
// 为什么+1,因为var y2 = new Date(y1, 0, 1)的原始有1天,,时间戳相减时,多减了1天
console.log(y1 + '年,' + '第' + day + '天')
}
getDays('2022/1/2') //2022年,第2天
getDays('2023/2/1') //2023年,第32天
getDays('2000/3/1') //2000年,第61天
getDays('2001/3/1') //2001年,第60天
// 方法2 判断闰年,然后把月份相加,再把不够一个月的日子相加
function getdays2(m) {
// 得到年份,用来判断是不是闰年
var year1 = new Date(m).getFullYear();
// console.log(year1) //2023
// 得到月份,用来判断循环几次
var month = new Date(m).getMonth();
// console.log(month) //1 月份0-11,为啥这里不加1,因为1月是满月的,后一个月是不满月的
for (var i = 0, sum = 0; i < month; i++) {
var arr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
//四年一闰,百年不闰;四百年再闰
if (year1 % 4 === 0 && year1 % 100 !== 0 || year1 % 400 === 0) {
// 闰年,2月份为29天
arr[1] = 29;
}
sum += arr[i]
}
// getDate() 得到日期 + 月份的日=多少天
console.log(year1 + '年,' + (sum + new Date(m).getDate()) + '天-')
}
getdays2('2023/2/1') // 2023年,32天-
getdays2('2000/3/1') //2000年,第61天-
getdays2('2000/4/18') //2000年,109天-
//方法3
function getDays3(year,month,date){
// 创建Date对象保存这个日期 月份是下标0-11
var d1=new Date(year,month-1,date+1)
console.log(d1) //2022-01-02T16:00:00.000Z
// 创建Date对象保存这一年的第一天
var d2=new Date(year,0,1)
// 计算两者相差的毫秒 时间戳getTime()
var d=d1.getTime()-d2.getTime()
// console.log(d) 92448000000
return d/(24*60*60*1000)
}
console.log(getDays3(2022,1,2)) //2
创建函数getDays,传递任意一个日期,返回这个日期是一年的第几天 (时间戳)
于 2022-04-19 00:03:39 首次发布
本文对比介绍了三种方法来计算给定日期是一年中的第几天:方法一是直接使用时间戳计算,方法二是考虑闰年并累加月份天数,方法三是通过创建特定日期对象进行差分。展示了如何在JavaScript中实现这些功能并提供示例结果。
摘要由CSDN通过智能技术生成