Nodejs 求前三天的日期,为何不对?
Nodejs 求前三天的日期,为何不对?
var now = new Date() ,beforeDay = new Date(now.getTime() - 24乘60乘60乘1000乘3) ,year = beforeDay.getFullYear() ,month = beforeDay.getMonth() + 1 ,day = beforeDay.getDay(); console.log(year,month,day); if(month < 10) month = ‘0’ + month.toString(); if(day < 10) day = ‘0’ + day.toString(); var before = year.toString() + month + day; console.log('before = '+day,before);
Node.js 求前三天的日期,为何不对?
问题描述
这段代码试图获取当前日期的前三天,并将其格式化为 YYYYMMDD
的字符串。然而,输出结果似乎并不正确。
示例代码
var now = new Date();
var beforeDay = new Date(now.getTime() - 24 * 60 * 60 * 1000 * 3);
var year = beforeDay.getFullYear();
var month = beforeDay.getMonth() + 1;
var day = beforeDay.getDate(); // 注意这里应该是 getDate() 而不是 getDay()
console.log(year, month, day);
if (month < 10) month = '0' + month.toString();
if (day < 10) day = '0' + day.toString();
var before = year.toString() + month + day;
console.log('before = ' + before);
解释
- 错误:代码中使用了
beforeDay.getDay()
来获取日期,但实际上getDay()
方法返回的是星期几(0-6),而不是具体的日期。 - 修正:应该使用
getDate()
方法来获取具体的日期。
正确的输出
通过上述修正后的代码,你可以正确地获取当前日期的前三天,并将其格式化为 YYYYMMDD
的字符串。例如:
// 当前日期
// var now = new Date("2023-10-05T00:00:00Z");
// 输出:2023 10 02
// before = 20231002
进一步优化
为了确保月份和日期始终是两位数,可以将条件判断简化为:
var month = ('0' + (beforeDay.getMonth() + 1)).slice(-2);
var day = ('0' + beforeDay.getDate()).slice(-2);
这样可以避免多次调用 toString()
方法,并且确保月份和日期始终是两位数。
总结
通过修正 getDay()
方法的使用,并确保月份和日期始终是两位数,可以正确地获取当前日期的前三天,并将其格式化为 YYYYMMDD
的字符串。
getDay获取的是这周的第几天,这个月的第几天应该用getDate
嚓 嚓 ,搞了2个小时,晕倒,忘记了
推荐一个库来解决这个问题: http://momentjs.com/
从你的代码来看,你在计算前3天的日期时存在一些问题。主要是在获取day
时使用了getDay()
方法,而应该使用getDate()
方法。此外,你在打印before
变量时,也有些小错误。
下面是修改后的代码:
var now = new Date();
var beforeDay = new Date(now.getTime() - 24 * 60 * 60 * 1000 * 3);
var year = beforeDay.getFullYear();
var month = beforeDay.getMonth() + 1;
var day = beforeDay.getDate(); // 使用 getDate() 获取日期
if (month < 10) month = '0' + month.toString();
if (day < 10) day = '0' + day.toString();
var before = year + '-' + month + '-' + day; // 修改格式以正确显示日期
console.log('before = ' + before);
解释:
getDay()
返回的是星期几(0-6),而不是日期。getDate()
返回具体的日期(1-31)。- 在拼接日期字符串时,建议使用
-
分隔符以更符合日期格式。
这样就可以正确地输出前三天的日期了。