【问题标题】:Calculate percentage between two dates in JavaScript在 JavaScript 中计算两个日期之间的百分比
【发布时间】:2015-06-19 04:23:42
【问题描述】:

我一直在尝试根据 StackOverflow 中的一些问题给出的代码计算两个日期之间的百分比,但代码无法正常工作。 这是问题:Get the percent of time elapsed between two javascript dates

var start = new Date(2015,6,1),
end = new Date(2015,12,1),
today = new Date();

alert(Math.round(( ( today - start ) / ( end - start ) ) * 100) + "%");

我想计算从 6 月 1 日到 12 月 1 日的进度,我得到“-7”

请帮忙!谢谢

【问题讨论】:

  • 确切的百分比?
  • 你可以很容易地得到两个日期之间的差异,但是你想看到它的百分比是多少?
  • 他想查看当前日期在时间间隔上的距离。如果您使用不同的年份,代码似乎可以正常工作。
  • 你的意思是代码不起作用,你甚至没有正确实现它。 It gives 1%。更清楚地了解日期之间的“进度”是什么意思。
  • @RayToal 是的,OP 已经在问题中提到了这一点......如果您打算回复我的评论,那么我是说它给了用户在链接中提到的代码的 1%这显然不起作用(请使用 @username)。基本上用户并不清楚他们想要什么输出以及为什么链接中的代码是错误的。

标签: javascript


【解决方案1】:
 var start = new Date(2015,6,1),
 end = new Date(2015,11,1),
 today = new Date();

 //use Math.abs to avoid sign
 var q = Math.abs(today-start);
 var d = Math.abs(end-start);
 alert("Rounded: "+Math.round((q/d)*100) + "%");
 alert("Fraction: "+((q/d)*100) + "%");

另请阅读 Ray Toal 答案 6 是 7 月不是 6 月

【讨论】:

    【解决方案2】:

    您的问题是第 6 个月是 7 月,而不是 6 月,所以您的答案是否定的。

    【讨论】:

      【解决方案3】:

      Javascript 从 0 到 11 计算月份。一月是 0,十二月是 11。您指定了六月到十二月,但输入了 6 和 12。

      【讨论】:

        【解决方案4】:

        你可以使用 momentJs 来做到这一点

        var startOfDate =  moment("2015.6.1"),
        endDate =  moment("2025.12.1"),
        todayDate =  moment();
        
         const daysDifference = moment(endDate).diff(startOfDate, 'days');
         const difference = todayDate.diff(startOfDate, 'days');
         
         const result = Math.round((difference / daysDifference) * 100);
         alert(result)
         console.log({result})
        <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案5】:

        给你:

        var start = new Date(2015,6,1),
        end = new Date(2015,12,1),
        today = new Date();
        
        alert( Math.round(((end - start) * 100 ) / today) + '%' );
        

        【讨论】:

        • 我已经在 cmets 中提到了这一点,使用 OP 链接到并声称错误的答案中的代码,给出 1%。虽然我们不确定这是否是他们想要的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 2021-12-11
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        相关资源
        最近更新 更多