JSはタイムスタンプを先ほど、N分前、今日は何時何分、昨日は何時何分などの表示に変えますか?

3710 ワード

方法1:
Javascript言語を使って、タイムスタンプを新浪微博のような時間の表示方法に変換します.要求変換規則: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

方法2
新浪微博のトップページで見ると、各ミニブログの後に表示される時間は標準的な年-月-日の形式ではなく、換算の時間差です.例えば、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版のsttotimeに相当します.
//js    :         
function getDateTimeStamp(dateStr){
 return Date.parse(dateStr.replace(/-/gi,"/"));
}