Javascript时间,多个1分钟vs 1分钟。收到时间通知的计时器

时间:2017-02-27 17:06:40

标签: javascript angularjs ajax date

self.calcMessageAge = function calcMessageAge(fireDate){
    var date = Date.parse(fireDate);
    var now = new Date();
    now = Date.now();

    // in seconds
    var diff = Math.abs(date - now)/1000;
    if(diff < 60) {
        return "1 min";
    }else if(diff < (60*60) ) {
        // minutes
        return Math.floor(diff/60) + " mins";

    } else if(diff < (60*60*24)) {
        // hours
        var hrs = Math.floor(diff/60/60) + " hours";
        if(hrs !== "1 hours") {
            return Math.floor(diff/60/60) + " hours";
        } else {
            return Math.floor(diff/60/60) + " hour";
        }
    } else if(diff < (60*60*24*7)) {
        // days
        var _day = Math.floor(diff/24/60/60) + " days";
        if(_day !== "1 days") {
            return Math.floor(diff/24/60/60) + " days";
        } else {
            return Math.floor(diff/24/60/60) + " day";
        }

    } else if(diff < (60*60*24*7*4)) {
        // weeks
        var _weeks = Math.floor(diff/7/24/60/60) + " weeks";
        if(_weeks !== "1 weeks") {
            return Math.floor(diff/7/24/60/60) + " weeks";
        } else {
            return Math.floor(diff/7/24/60/60) + " week";
        }
    } else {
        var _months = Math.floor(diff/4/7/24/60/60) + " months";
        if(_months !== "1 months") {
            return Math.floor(diff/4/7/24/60/60) + " months";
        } else {
            return Math.floor(diff/4/7/24/60/60) + " month";
        }
    }
};

Above方法应该根据通知到达UI的时间(fireDate)返回一个字符串。 字符串如&#34; 1分钟前&#34;或&#34; 1天前&#34;然后&#34; 2分钟前&#34;或者&#34; 2天前&#34;

我正在接受&#34; 1分钟前&#34;正确,但在60秒,我得到了#1; 1分钟&#34;返回,这也发生在一天。

我认为这与事实有关,我应该检查60秒,它应该是59?我真的很难过。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

你可以这样做

&#13;
&#13;
const getDiffrence = fireDate => {
  const date = new Date(fireDate).getTime();
  let now = new Date().getTime();
  const diff = Math.abs(date - now) / 1000
  const min = Math.floor(diff/60) % 60 || ''
  const h = Math.floor(diff/60/60) % 60 || ''
  const day = Math.floor(diff/60/60/24) % 24 || ''
  const week = Math.floor(diff/60/60/24/7)|| ''
  const month = Math.floor(diff/4/7/24/60/60) || ''
  return `${month ? month + 'months' : ''} ${week ? week + 'weeks' : ''} ${day ? day + 'days' : ''} ${day ? day + 'days' : ''} ${h ? h + 'hours' : ''} ${min ? min + 'mins' : ''} `.replace(/\b(1\D+?)s/g, '$1').trim()
}

console.log(getDiffrence('2017/02/27 18:22'))
console.log(getDiffrence(new Date().getTime() - 60 * 1000 - 5000))
&#13;
&#13;
&#13;

此代码的主要部分是.replace(/\b(1\D+?)s/g, '$1') 这会在1 anythings之后将所有1 anything替换为.replace(/(0\D+?)s\s*/g, '')或evnen crazer,您只需创建类似'1days 0hours 0minutes'的字符串

&#13;
&#13;
console.log('11mounths 1days 0hours 20minutes'.replace(/\b0\D+?s\s*/g, '').replace(/\b(1\D+?)s/g, '$1'))
&#13;
&#13;
&#13;

答案 1 :(得分:0)

var calcMessageAge = function(fireDate) {
  var date = Date.parse(fireDate);
  var now = Date.now();
  // in seconds
  var diff = Math.abs(date - now) / 1000;
  var minute = 60;
  var hour = 60 * minute;
  var day = 24 * hour;
  var week = 7 * day;
  var month = 4 * week; // month is usually longer than 4 weeks but I let the same as in original code
  var num;
  var label;

  if (diff > month) {
    num = Math.floor(diff / month);
    label = num + ' month' + (num > 1 ? 's': '');
  } else if (diff > week) {
    num = Math.floor(diff / week);
    label = num + ' week' + (num > 1 ? 's': '');
  } else if (diff > day) {
    num = Math.floor(diff / day);
    label = num + ' day' + (num > 1 ? 's': '');
  } else if (diff > hour) {
    num = Math.floor(diff / hour);
    label = num + ' hour' + (num > 1 ? 's': '');
  } else if (diff > minute) {
    num = Math.floor(diff / minute);
    label = num + ' min' + (num > 1 ? 's': '');
  } else {
    label = '1 min';
  }

  return label;
};

console.log(calcMessageAge('02-02-2017'));
console.log(calcMessageAge('01-01-2017 20:00'));
console.log(calcMessageAge(new Date(new Date().getTime() - 60 * 1000)));
console.log(calcMessageAge(new Date(new Date().getTime() - 59 * 1000)));
console.log(calcMessageAge(new Date(new Date().getTime() - 60 * 60 * 4 * 1000)));