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?我真的很难过。任何帮助将不胜感激。
答案 0 :(得分:0)
你可以这样做
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;
此代码的主要部分是.replace(/\b(1\D+?)s/g, '$1')
这会在1 anythings
之后将所有1 anything
替换为.replace(/(0\D+?)s\s*/g, '')
或evnen crazer,您只需创建类似'1days 0hours 0minutes'
的字符串
console.log('11mounths 1days 0hours 20minutes'.replace(/\b0\D+?s\s*/g, '').replace(/\b(1\D+?)s/g, '$1'))
&#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)));