我从RSS FEED JSON 文件中获取日期,日期类似于" 2018-02-09 00:00:00 &#34 ; ,它是一个字符串,但我知道我可以使用Number()
或parseInt()
将其转换为整数并使用Date()
获取日期,我希望从发生以来得到时间,就像1天前,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天,所以这是一个轻微不精确的来源,但不到一个月的时间是准确的。