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);


7 回复

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);

解释

  1. 错误:代码中使用了 beforeDay.getDay() 来获取日期,但实际上 getDay() 方法返回的是星期几(0-6),而不是具体的日期。
  2. 修正:应该使用 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个小时,晕倒,忘记了

取日期用getDate(),而不是getDay(),那是取星期几。

另外更简单的做法是

var d = new Date();
d.setDate(d.getDate() - 3);
console.log(d);

推荐一个库来解决这个问题: 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)。
  • 在拼接日期字符串时,建议使用 - 分隔符以更符合日期格式。

这样就可以正确地输出前三天的日期了。

回到顶部