使用JavaScript计算日期时间差天数,判断是否已间隔满7天
原代码存在的问题
created_at赋值格式错误:你写的2021-05-20是数值减法表达式,计算结果为1996,既不是日期字符串也不是Date对象,完全无法参与日期差值计算。就算后端返回的是2021-05-20 14:00:00格式的datetime数据,也需要先转换为Date对象才能做时间差计算。- 时间差值单位判断错误:两个Date对象相减得到的结果是毫秒数,你直接和数值7比较逻辑完全不成立,7天对应的毫秒数为
7 * 24 * 60 * 60 * 1000。 - 存在无效冗余代码:你拼接了当前日期字符串
dataAtual,但全程没有使用该变量,属于多余代码。 - 变量名拼写不一致:if分支中定义的变量是
create_date,else分支中定义的是created_date,两个变量名不一致,后续调用时会出现变量未定义的问题。 - 判断逻辑写反:你的判断条件
result <7对应的逻辑是间隔小于7天返回true,和你要的「判断是否已经过去7天」的需求完全相反。
正确实现方案
按实际时间差判断(精确到秒)
如果要按实际经过的时间判断是否满7*24小时,使用以下代码:
// 假设接口返回的datetime字符串为 '2021-05-20 14:00:00' const created_at_str = '2021-05-20 14:00:00'; // 兼容低版本Safari可把横杠替换为斜杠:created_at_str.replace(/-/g, '/') const createdDate = new Date(created_at_str); const now = new Date(); // 计算时间差 单位:毫秒 const diffMs = now - createdDate; // 7天对应的毫秒数 const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000; // 判断是否已经过去7天:差值大于等于7天的毫秒数即为已过去7天 const isOverSevenDays = diffMs >= SEVEN_DAYS_MS; console.log(isOverSevenDays);
按自然日判断(忽略时分秒)
如果只要自然日差值超过7天就算满足条件,把两个日期的时分秒都置为0再计算:
const created_at_str = '2021-05-20 14:00:00'; const createdDate = new Date(created_at_str); // 把创建日期的时分秒置为0 createdDate.setHours(0, 0, 0, 0); const now = new Date(); // 把当前日期的时分秒置为0 now.setHours(0, 0, 0, 0); const diffMs = now - createdDate; const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000; const isOverSevenDays = diffMs >= SEVEN_DAYS_MS; console.log(isOverSevenDays);
内容的提问来源于stack exchange,提问作者teste code
相关产品推荐
相关产品推荐

