将时间转化为几秒前 几分钟前 几小时前...

前言

将时间转化为 几秒前、几分钟前、几小时前...  是一个比较常见需求,常用于新闻之内的。这个我们就不做讨论了 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 }
原文地址:https://www.cnblogs.com/langxiyu/p/13221156.html