我需要编写JavaScript,允许我比较两个ISO时间戳,然后打印出它们之间的差异,例如:“32秒”。
下面是我在Stack Overflow上找到的一个函数,它将普通日期转换为ISO格式的日期。所以,这是第一件事,以ISO格式获取当前时间。
我需要做的下一件事是获取另一个ISO时间戳来比较它,好吧,我已经存储在一个对象中。它可以像这样访问:marker.timestamp(如下面的代码所示)。现在我需要比较这两个时间戳并找出它们之间的区别。如果它是< 60秒,它应该以秒为单位输出,如果它是> 60秒,它应该输出1分12秒前的例子。
谢谢!
function ISODateString(d){
function pad(n){return n<10 ? '0'+n : n}
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z'}
var date = new Date();
var currentISODateTime = ISODateString(date);
var ISODateTimeToCompareWith = marker.timestamp;
// Now how do I compare them?
答案 0 :(得分:30)
比较两个日期就像
一样简单var differenceInMs = dateNewer - dateOlder;
因此,将时间戳转换回 Date 实例
var d1 = new Date('2013-08-02T10:09:08Z'), // 10:09 to
d2 = new Date('2013-08-02T10:20:08Z'); // 10:20 is 11 mins
获得差异
var diff = d2 - d1;
根据需要格式化
if (diff > 60e3) console.log(
Math.floor(diff / 60e3), 'minutes ago'
);
else console.log(
Math.floor(diff / 1e3), 'seconds ago'
);
// 11 minutes ago
答案 1 :(得分:1)
我只将Date对象存储为ISODate类的一部分。您可以在需要显示时进行字符串转换,例如toString
方法。这样你就可以使用非常简单的逻辑与Date类来确定两个ISOD之间的区别:
var difference = ISODate.date - ISODateToCompare.date;
if (difference > 60000) {
// display minutes and seconds
} else {
// display seconds
}
答案 2 :(得分:1)
我建议从两个时间戳中获取时间,如下所示:
// currentISODateTime and ISODateTimeToCompareWith are ISO 8601 strings as defined in the original post
var firstDate = new Date(currentISODateTime),
secondDate = new Date(ISODateTimeToCompareWith),
firstDateInSeconds = firstDate.getTime() / 1000,
secondDateInSeconds = secondDate.getTime() / 1000,
difference = Math.abs(firstDateInSeconds - secondDateInSeconds);
然后使用difference
。例如:
if (difference < 60) {
alert(difference + ' seconds');
} else if (difference < 3600) {
alert(Math.floor(difference / 60) + ' minutes');
} else {
alert(Math.floor(difference / 3600) + ' hours');
}
重要提示:我使用Math.abs
来比较日期,以秒为单位,以获得它们之间的绝对差异,无论哪个更早。