如何用当前日期减去日期以确定它发生了多长时间?

时间:2018-02-11 01:03:53

标签: javascript jquery json date datetime

我从RSS FEED JSON 文件中获取日期,日期类似于" 2018-02-09 00:00:00 &#34 ; ,它是一个字符串,但我知道我可以使用Number()parseInt()将其转换为整数并使用Date()获取日期,我希望从发生以来得到时间,就像1天前,2小时前..等,如何实现?

2 个答案:

答案 0 :(得分:0)

感谢Robert Gravelle https://www.htmlgoodies.com/html5/javascript/calculating-the-difference-between-two-dates-in-javascript.html

计算两个已知日期之间的差异

不幸的是,计算两个已知日期之间的日期间隔(例如天,周或月)并不容易,因为您不能只将Date对象添加到一起。为了在任何类型的计算中使用Date对象,我们必须首先检索Date的内部毫秒值,该值存储为一个大整数。执行此操作的功能是Date.getTime()。一旦两个日期都被转换,从较早的日期中减去后一个日期将返回以毫秒为单位的差异。然后可以通过将该数除以相应的毫秒数来确定所需的间隔。例如,要获得给定毫秒数的天数,我们将除以86,400,000,即一天中的毫秒数(1000 x 60秒x 60分钟x 24小时):

Date.daysBetween = function( date1, date2 )
{
    //Get 1 day in milliseconds
    var one_day=1000*60*60*24;

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime();
    var date2_ms = date2.getTime();

    // Calculate the difference in milliseconds
    var difference_ms = date2_ms - date1_ms;

    // Convert back to days and return
    return Math.round(difference_ms/one_day); 
}

//Set the two dates
var y2k  = new Date(2000, 0, 1); 
var Jan1st2010 = new Date(y2k.getFullYear() + 10, y2k.getMonth(),     y2k.getDate());
var today= new Date();
//displays 726
console.log( 'Days since ' 
       + Jan1st2010.toLocaleDateString() + ': ' 
       + Date.daysBetween(Jan1st2010, today));

舍入是可选的,取决于您是否需要部分天。

答案 1 :(得分:0)

首先,我们定义所需的时间单位(从毫秒开始的转换):

timeTypes={ year: 1000*60*60*24*365, month: 1000*60*60*24*30, day: 1000*60*60*24, hour: 1000*60*60, minute: 1000*60, second: 1000, millisecond: 1 };

td开始是以毫秒为单位的时差,即Date对象.getTime()值的结果:

td = d1.getTime() - d2.getTime();

然后我们用最大的单位减少它并构建一个字符串:

timeString='';
remaining=td;
for (i in timeTypes)
    if (remaining > timeTypes[i]) {
        count = parseInt(remaining/timeTypes[i]);
        remaining -= timeTypes[i]*count;
        timeString += count+' '+i+(count>1 ? 's' : '')+' ';
    }

现在,timeString将包含以下内容:

1 month 9 days 42 seconds

这是每月治疗30天,所以这是一个轻微不精确的来源,但不到一个月的时间是准确的。