使用Javascript語言,將時間戳轉換爲相似新浪微博的時間的表示方法。
要求轉換規則:
1分鐘之內顯示爲:剛剛
1小時之內顯示爲:N分鐘前
當天之內顯示爲:今天 N點N分(如:今天 22:33)
昨天時間顯示爲:昨天 N點N分(如:昨天 10:15)
當年之內顯示爲:N月N日 N點N分(如:02月03日 09:33)
今年之前顯示爲:N年N月N日 N點N分(如:2000年09月18日 15:59)函數
自定義的轉換函數:code
function timestampFormat( timestamp ) { function zeroize( num ) { return (String(num).length == 1 ? '0' : '') + num; } var curTimestamp = parseInt(new Date().getTime() / 1000); //當前時間戳 var timestampDiff = curTimestamp - timestamp; // 參數時間戳與當前時間戳相差秒數 var curDate = new Date( curTimestamp * 1000 ); // 當前時間日期對象 var tmDate = new Date( timestamp * 1000 ); // 參數時間戳轉換成的日期對象 var Y = tmDate.getFullYear(), m = tmDate.getMonth() + 1, d = tmDate.getDate(); var H = tmDate.getHours(), i = tmDate.getMinutes(), s = tmDate.getSeconds(); if ( timestampDiff < 60 ) { // 一分鐘之內 return "剛剛"; } else if( timestampDiff < 3600 ) { // 一小時前以內 return Math.floor( timestampDiff / 60 ) + "分鐘前"; } else if ( curDate.getFullYear() == Y && curDate.getMonth()+1 == m && curDate.getDate() == d ) { return '今天' + zeroize(H) + ':' + zeroize(i); } else { var newDate = new Date( (curTimestamp - 86400) * 1000 ); // 參數中的時間戳加一天轉換成的日期對象 if ( newDate.getFullYear() == Y && newDate.getMonth()+1 == m && newDate.getDate() == d ) { return '昨天' + zeroize(H) + ':' + zeroize(i); } else if ( curDate.getFullYear() == Y ) { return zeroize(m) + '月' + zeroize(d) + '日 ' + zeroize(H) + ':' + zeroize(i); } else { return Y + '年' + zeroize(m) + '月' + zeroize(d) + '日 ' + zeroize(H) + ':' + zeroize(i); } } }
參數的時間不能大於當前時間,大於當前時間會返回「剛剛」。orm
用法展現:對象
timestampFormat(1326170770); //2012年01月10日 12:46 timestampFormat(Date.parse('2016-10-11 15:26:10')/1000); //剛剛 timestampFormat(Date.parse('2016-10-11 15:10:10')/1000); //16分鐘前 timestampFormat(Date.parse('2016-10-11 10:10:10')/1000); //今天10:10 timestampFormat(Date.parse('2016-10-10 10:10:10')/1000); //昨天10:10 timestampFormat(Date.parse('2016-02-10 10:10:10')/1000); //02月10日 10:10 timestampFormat(Date.parse('2012-10-10 10:10:10')/1000); //2012年10月10日 10:10
在新浪微博首頁看到每條微博後邊顯示的時間並非標準的年-月-日格式,而是通過換算的時間差,如:發表於5分鐘前、發表於「2小時前」,比起標準的時間顯示格式,貌似更加直觀和人性化。要實現相似功能,用JS就能夠,實現方法以下:ip
//JavaScript函數: var minute = 1000 * 60; var hour = minute * 60; var day = hour * 24; var halfamonth = day * 15; var month = day * 30; function getDateDiff(dateTimeStamp){ var now = new Date().getTime(); var diffValue = now - dateTimeStamp; if(diffValue < 0){ //若日期不符則彈出窗口告之 //alert("結束日期不能小於開始日期!"); } var monthC =diffValue/month; var weekC =diffValue/(7*day); var dayC =diffValue/day; var hourC =diffValue/hour; var minC =diffValue/minute; if(monthC>=1){ result="發表於" + parseInt(monthC) + "個月前"; } else if(weekC>=1){ result="發表於" + parseInt(weekC) + "周前"; } else if(dayC>=1){ result="發表於"+ parseInt(dayC) +"天前"; } else if(hourC>=1){ result="發表於"+ parseInt(hourC) +"個小時前"; } else if(minC>=1){ result="發表於"+ parseInt(minC) +"分鐘前"; }else result="剛剛發表"; return result; }
若你獲得的時間格式不是時間戳,能夠使用下面的JavaScript函數把字符串轉換爲時間戳, 本函數的功能至關於JS版的strtotime:字符串
//js函數代碼:字符串轉換爲時間戳 function getDateTimeStamp(dateStr){ return Date.parse(dateStr.replace(/-/gi,"/")); }