【问题标题】:Percentage between two dates compared to today与今天相比,两个日期之间的百分比
【发布时间】:2019-06-10 02:16:58
【问题描述】:

我正在创建一个包含里程碑的 UI,我将使用进度条来显示它。

我正在尝试计算从里程碑设置完成之日起与今天的日期之间的百分比。

例如,如果我有一个名为“现场直播”的里程碑,该里程碑将于 2015 年 12 月 1 日发生,并且我将里程碑放在 1 月 1 日,我想确定我们从开始日期到结束日期。

小提琴:http://jsfiddle.net/zz4c16fx/2/

var start = new Date(2015,0,1), // Jan 1, 2015 - The date we put this milestone in
    end = new Date(2015,7,24), // June 24, 2015 - The date the milestone is due
    today = new Date(), // April 23, 2015
    p = Math.round(100-((end - start) * 100 ) / today) + '%';

// Update the progress bar
$('.bar').css( "width", p ).after().append(p);

那是我的尝试,但要么我的数学错误,要么我想错了。它返回的号码是99%。从今天开始还有 1.5 个月的时间,我觉得这个数字应该更低。

我的最终结果是显示一个进度条,根据开始、结束和今天的日期显示我们距离完成日期有多近。

【问题讨论】:

  • 如果你使用的是 node js,你可以使用moment js 包。它有很多功能,如time from nowsubtract

标签: javascript


【解决方案1】:

试试这个:

var start = new Date(2015, 0, 1), // Jan 1, 2015
    end = new Date(2015, 7, 24), // August 24, 2015
    today = new Date(), // April 23, 2015
    p = Math.round(((today - start) / (end - start)) * 100) + '%';
// Update the progress bar
$('.bar').css("width", p).after().append(p);

演示:http://jsfiddle.net/zz4c16fx/6/

【讨论】:

  • 所以你的也返回 99%,但这对我来说似乎不正确。我的也得出了这个结果——它准确吗,我只是想不清楚吗?这不应该是80年代吗?
  • 哦,你的小提琴是我的 OP 的链接 :)
  • 已转换为 C# .NET 并确认设置“p”的逻辑有效。
【解决方案2】:

试试这个,将结束日期和开始日期转换为单位时间戳值。

// Convert to unix values timestamp values
var startDate = start.getTime();
var endDate = end.getTime();
var todayDate = today.getTime();

// Get the total possible timestamp value
var total = endDate - startDate;

// Get the current value
var current = todayDate - startDate;

// Get the percentage
var percentage = (current / total) * 100;

alert(percentage);

JsFiddle http://jsfiddle.net/x3snbz2w/2/

【讨论】:

  • 日期对象在与数学运算符一起使用时将被隐式强制转换为数字。并且 X/Y === (X/1000) / (Y/1000) 所以转换为秒是没有意义的。
  • 谢谢@Touffy 没想到更新的答案。
  • 您可以将前 4 行一并删除。
【解决方案3】:

要获得一个日期与另一个日期之间到目前为止已过去的天数百分比,您需要计算开始和结束之间的时间,然后计算开始和今天之间的时间。然后将第二个数字除以第一个数字:

var start = new Date(2015,0,1),
    end = new Date(2015,7,24), 
    today = new Date();

var timeBetweenStartAndEnd = (end - start); 
var timeBetweenStartAndToday = (today - start);

var p = Math.round(timeBetweenStartAndToday / timeBetweenStartAndEnd * 100); 

console.log("Percentage of days elapsed thus far: " + p);

【讨论】:

    猜你喜欢
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多