将时间转化为几秒前 几分钟前 几小时前...
前言
将时间转化为 几秒前、几分钟前、几小时前... 是一个比较常见需求,常用于新闻之内的。这个我们就不做讨论了 0.0~
今天说说我遇到的一个问题: 为什么转化的时间在编辑器上是正常的,IOS手机上面就会变成 NaN ?what~
Part.1 效果
编辑器效果
真机效果
Part.2 问题原因
问题原因:原来 IOS 手机的时间格式与 Android 手机不同(这个原因真不好发现)
IOS:年/月/日
Android : 年-月-日
解决步骤: 1. 将 年-月-日 运用正则替换为 年/月/日, 我这里的替换方法: time.replace(/-/g, '/')
2. 然后用替换好的时间得到时间戳: new Date(time).getTime()
3. 调用转化方法
Part.3 转化方法
1 /** 2 * 转化时间格式 '几秒前、几分钟前、几小时前...' 3 */ 4 function friendlyDate(timestamp) { 5 var formats = { 6 'year': '%n% 年前', 7 'month': '%n% 月前', 8 'day': '%n% 天前', 9 'hour': '%n% 小时前', 10 'minute': '%n% 分钟前', 11 'second': '%n% 秒前', 12 }; 13 var now = Date.now(); 14 var seconds = Math.floor((now - Number(timestamp)) / 1000); 15 var minutes = Math.floor(seconds / 60); 16 var hours = Math.floor(minutes / 60); 17 var days = Math.floor(hours / 24); 18 var months = Math.floor(days / 30); 19 var years = Math.floor(months / 12); 20 21 var diffType = ''; 22 var diffValue = 0; 23 if (years > 0) { 24 diffType = 'year'; 25 diffValue = years; 26 } else { 27 if (months > 0) { 28 diffType = 'month'; 29 diffValue = months; 30 } else { 31 if (days > 0) { 32 diffType = 'day'; 33 diffValue = days; 34 } else { 35 if (hours > 0) { 36 diffType = 'hour'; 37 diffValue = hours; 38 } else { 39 if (minutes > 0) { 40 diffType = 'minute'; 41 diffValue = minutes; 42 } else { 43 diffType = 'second'; 44 diffValue = seconds === 0 ? (seconds = 1) : seconds; 45 } 46 } 47 } 48 } 49 } 50 return formats[diffType].replace('%n%', diffValue); 51 }