最近遇见一个功能,需要把后台的提供的具体时间格式转换为以下格式:
第一次做的时候使用用户的当前系统时间减去发帖时间,计算出时间差,根据相对时间差来判断条件,修改元素的innerHTML值;代码如下:
1 function formatdate($dateSelector){ 2 var arr=[]; 3 //获取时间日期 4 for(var i=0;i<$dateSelector.length;i++){ 5 arr.push($dateSelector[i].innerHTML); 6 } 7 //获取系统当前时间 8 function CurrentTime(){ 9 var now = new Date(); 10 var year = now.getFullYear(); //年 11 var month = now.getMonth() + 1; //月 12 var day = now.getDate(); //日 13 var hh = now.getHours(); //时 14 var mm = now.getMinutes(); //分 15 var ss= now.getSeconds(); 16 var clock = year + "-"; 17 18 if(month < 10){ 19 clock += "0"; 20 } 21 clock += month + "-"; 22 if(day < 10){ 23 clock += "0"; 24 } 25 clock += day + " "; 26 if(hh < 10){ 27 clock += "0"; 28 } 29 clock += hh + ":"; 30 if(mm < 10){ 31 clock += ‘0‘; 32 } 33 clock += mm + ":"; 34 if(ss < 10){ 35 clock += ‘0‘; 36 } 37 clock += ss; 38 return(clock); 39 } 40 CurrentTime(); 41 //计算时间差函数 42 function GetDateDiff(startTime, endTime, diffType) { 43 //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 44 startTime = startTime.replace(/-/g, "/"); 45 endTime = endTime.replace(/-/g, "/"); 46 //将计算间隔类性字符转换为小写 47 diffType = diffType.toLowerCase(); 48 var sTime = new Date(startTime); //开始时间 49 var eTime = new Date(endTime); //结束时间 50 //作为除数的数字 51 var divNum = 1; 52 switch (diffType) { 53 case "second": 54 divNum = 1000;//毫秒数 55 break; 56 case "minute": 57 divNum = 1000 * 60; 58 break; 59 case "hour": 60 divNum = 1000 * 3600; 61 break; 62 case "day": 63 divNum = 1000 * 3600 * 24; 64 break; 65 default: 66 break; 67 } 68 return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum)); 69 } 70 //填写日期 71 for(var j=0; j<arr.length; j++){ 72 //小于一分钟-----X秒钟前 73 if(GetDateDiff(arr[j],CurrentTime(),"second") > 0 && GetDateDiff(arr[j],CurrentTime(),"second") <= 59){ 74 arr[j]=GetDateDiff(arr[j],CurrentTime(),"second") + "秒钟前"; 75 $dateSelector[j].innerHTML=arr[j]; 76 } 77 //小于一小时-----X分钟前 78 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 3599){ 79 arr[j]=Math.floor(GetDateDiff(arr[j],CurrentTime(),"second") / 60) + "分钟前"; 80 $dateSelector[j].innerHTML=arr[j]; 81 } 82 //一小时到一天-----X小时前 83 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 86399){ 84 arr[j]=Math.floor(GetDateDiff(arr[j],CurrentTime(),"second") / 3600) + "小时前"; 85 $dateSelector[j].innerHTML=arr[j]; 86 } 87 //1-2天-----昨天 88 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 172799){ 89 $dateSelector[j].innerHTML = "昨天"; 90 } 91 //2-3天-----前天 92 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 259199){ 93 $dateSelector[j].innerHTML = "前天"; 94 } 95 //3-7天-----X天前 96 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 604799){ 97 arr[j]=Math.floor(GetDateDiff(arr[j],CurrentTime(),"second") / 86400)+ "天前"; 98 $dateSelector[j].innerHTML=arr[j]; 99 } 100 //7-14天-----上周 101 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 1209599){ 102 $dateSelector[j].innerHTML="上周"; 103 } 104 //2-4周-----X周前 105 else if(GetDateDiff(arr[j],CurrentTime(),"second") <= 2419199){ 106 arr[j]=Math.floor(GetDateDiff(arr[j],CurrentTime(),"second") / 604800 )+ "周前"; 107 $dateSelector[j].innerHTML=arr[j]; 108 } 109 //超过一个月-----显示具体时间 110 else if(GetDateDiff(arr[j],CurrentTime(),"second") >= 2419200){ 111 //arr[j]=arr[j]; 112 $dateSelector[j].innerHTML=arr[j].substring(0,16); 113 } 114 } 115 }
但是,昨天听到一个message,有国外用户访问网站时出现了负的时间值,然后,打算用第二种方法,利用时间戳来计算时间差,代码更简单;代码如下:
1 function formatdate($dateSelector){ 2 var arr=[]; 3 //1.获取用户时间戳 4 for(var i=0;i<$dateSelector.length;i++){ 5 arr.push($dateSelector[i].innerHTML); 6 } 7 //2.获取当前时间戳-----秒数 8 var timestamp = Math.round(new Date().getTime() / 1000); 9 10 //3.转换日期格式 11 function getLocalTime(now) { 12 var year = now.getFullYear(); //年 13 var month = now.getMonth() + 1; //月 14 var day = now.getDate(); //日 15 var hh = now.getHours(); //时 16 var mm = now.getMinutes(); //分 17 var clock = year + "-"; 18 19 if(month < 10){ 20 clock += "0"; 21 } 22 clock += month + "-"; 23 if(day < 10){ 24 clock += "0"; 25 } 26 clock += day + " "; 27 if(hh < 10){ 28 clock += "0"; 29 } 30 clock += hh + ":"; 31 if(mm < 10){ 32 clock += ‘0‘; 33 } 34 clock += mm + ""; 35 return clock; 36 } 37 38 //4.填写日期--计算差值 39 for(var j=0; j<arr.length; j++){ 40 41 var diff = timestamp - arr[j] , day_diff = Math.floor( diff / 86400 ); 42 43 //小于一分钟-----X秒钟前 44 if(diff > 0 && diff < 60){ 45 arr[j]= diff+‘秒钟前‘; 46 $dateSelector[j].innerHTML=arr[j]; 47 } 48 //小于一小时-----X分钟前 49 else if(diff < 3600){ 50 arr[j]= Math.floor(diff/60)+‘分钟前‘; 51 $dateSelector[j].innerHTML=arr[j]; 52 } 53 //一小时到一天-----X小时前 54 else if(diff < 86400){ 55 arr[j]= Math.floor(diff/3600)+‘小时前‘; 56 $dateSelector[j].innerHTML=arr[j]; 57 } 58 //1-2天-----昨天 59 else if(day_diff < 2){ 60 arr[j]= ‘昨天‘; 61 $dateSelector[j].innerHTML=arr[j]; 62 } 63 //2-3天-----前天 64 else if(day_diff < 3){ 65 arr[j]= ‘前天‘; 66 $dateSelector[j].innerHTML=arr[j]; 67 } 68 //3-7天-----X天前 69 else if(day_diff < 7){ 70 arr[j]= day_diff+‘天前‘; 71 $dateSelector[j].innerHTML=arr[j]; 72 } 73 //7-14天-----上周 74 else if(day_diff < 14){ 75 arr[j]= ‘上周‘; 76 $dateSelector[j].innerHTML=arr[j]; 77 } 78 //2-4周-----X周前 79 else if(day_diff < 30){ 80 arr[j]= Math.floor(day_diff/7)+‘周前‘; 81 $dateSelector[j].innerHTML=arr[j]; 82 } 83 //超过一个月-----显示具体时间 84 if(day_diff >= 30){ 85 var d=new Date(parseInt(arr[j]) * 1000); 86 $dateSelector[j].innerHTML=getLocalTime(d); 87 } 88 } 89 }
原文地址:http://www.cnblogs.com/paxster/p/3850846.html