我有一个代码需要检查给定的秒数是否可以组成一年,但是当传递1秒的参数时,该功能无效!



const isUpToYear = seconds => parseInt(seconds / 31536000) >= 1;

console.log(isUpToYear(311536000));  // true
console.log(isUpToYear(3600));  // false
console.log(isUpToYear(1));    // true!!





显然,如果传入一秒钟,我需要该函数返回false。
我该如何解决?

最佳答案

parseInt用于字符串。传递给parseInt的第一个参数将转换为字符串if it isn't one already


  要解析的值。如果此参数不是字符串,则使用ToString抽象操作将其转换为一个参数。此参数中的前导空格被忽略。


1 / 31536000很小:3.1709791983764586e-8。对此调用parseInt导致将其转换为字符串('3.1709791983764586e-8'),将其再次转换为数字将导致3,这是可以理解的(因为3是字符串中唯一的前导数字字符)。

请改用Math.floor



const isUpToYear = seconds => Math.floor(seconds / 31536000) >= 1;

console.log(isUpToYear(311536000));  // true
console.log(isUpToYear(3600));  // false
console.log(isUpToYear(1));    // true!!

10-07 17:40