比较2个ISO 8601时间戳和输出秒/分钟差异

时间:2013-08-02 18:34:26

标签: javascript

我需要编写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?

3 个答案:

答案 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来比较日期,以秒为单位,以获得它们之间的绝对差异,无论哪个更早。