JavaScript中使用Date函数移除日期时间及获取当年双休日的问题
嘿,我来帮你搞定这两个JavaScript日期处理的问题~
问题一:在JavaScript中使用Date函数转换日期时,移除当前时间部分
要移除Date对象的时间部分,核心是把时、分、秒、毫秒都重置为0,这里有几种实用的方法:
方法一:直接设置时分秒为0
这是最直接的方式,直接修改原Date对象的时间部分:const today = new Date(); // 依次设置时、分、秒、毫秒为0 today.setHours(0, 0, 0, 0); console.log(today); // 输出类似:2024-05-20T00:00:00.000Z(时区不同可能略有差异)方法二:通过日期字符串重构
利用toDateString()获取不含时间的日期字符串,再转回Date对象:const today = new Date(); const dateOnly = new Date(today.toDateString()); console.log(dateOnly); // 同样得到当天0点的Date对象toDateString()会返回类似"Mon May 20 2024"的纯日期字符串,转成Date后自动把时间设为0。方法三:ISO字符串截取(适合UTC场景)
如果需要UTC时区的纯日期,可以这么做:const today = new Date(); const utcDateOnly = new Date(today.toISOString().split('T')[0]); console.log(utcDateOnly); // UTC时区的当天0点日期toISOString()返回格式如"2024-05-20T12:34:56.789Z",截取T之前的部分就是纯日期,再转成Date即可。
问题二:获取当年所有周六和周日的代码修复
先帮你排查原代码里的几个关键问题:
- 月份参数错误:JavaScript的Date月份是
0-based(0代表1月,11代表12月),你写的y.setFullYear(currentyear, 12, 31)会直接跳到下一年1月31日;另外x.setFullYear(currentyear, 00, 00)里的日期00会被解析为上一年12月31日,要改成01才是当年1月1日。 - 循环逻辑错误:原循环用
i += j但没修改x的日期,会导致死循环,应该每次给x加1天。 - 判断条件偏差:你注释写的是获取周一,但实际要的是周六(
getDay()返回6)和周日(返回0),判断条件需要调整。
修复后的完整代码如下:
const x = new Date(); const currentYear = x.getFullYear(); // 设置起始日期为当年1月1日 x.setFullYear(currentYear, 0, 1); // 设置结束日期为当年12月31日 const y = new Date(currentYear, 11, 31); const allWeekends = []; // 遍历当年每一天 while (x <= y) { const dayOfWeek = x.getDay(); // 匹配周六(6)或周日(0) if (dayOfWeek === 0 || dayOfWeek === 6) { // 存Date对象的副本,避免后续修改影响数组内的日期 allWeekends.push(new Date(x)); // 也可以直接存格式化后的字符串:allWeekends.push(x.toLocaleDateString()); } // 日期加1天,继续下一轮循环 x.setDate(x.getDate() + 1); } console.log("当年所有周末日期:", allWeekends);
补充说明:
- 用
while循环替代原for循环,更直观判断日期是否在当年范围内; - 每次循环给
x加1天,确保遍历到全年所有日期; - 存储Date对象时用
new Date(x)创建副本,因为setDate会修改原对象,避免数组里的所有元素最后变成同一个日期。
内容的提问来源于stack exchange,提问作者Chitra Nandpal
相关产品推荐
相关产品推荐

