JS將時候戳轉換為方才、N分鐘前、本日幾點幾分、昨天幾點幾分等示意法

要領一:

運用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)

自定義的轉換函數:

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);
        }
    }
}

參數的時候不能大於當前時候,大於當前時候會返回“方才”。

用法展現:

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就能夠,完成要領以下:

//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,"/"));
}
    原文作者:呂鵬
    原文地址: https://segmentfault.com/a/1190000014795596
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞