>  기사  >  웹 프론트엔드  >  분 전, 시간 전, 일 전 등의 시차 표시 효과를 구현하기 위해 JS 및 jquery를 사용하는 코드 예제 공유_javascript 기술

분 전, 시간 전, 일 전 등의 시차 표시 효과를 구현하기 위해 JS 및 jquery를 사용하는 코드 예제 공유_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:52:481341검색

유사한 기능을 구현하려면 JS를 사용하면 됩니다.

1. 자바스크립트 함수 구현:
예시 1:

코드 복사 코드는 다음과 같습니다.

//JavaScript 함수:
var 분 = 1000 * 60;
var 시간 = 분 * 60;
var day = 시간 * 24;
var halfamonth = 일 * 15 ;
var 월 = 일 * 30;
function getDateDiff(dateTimeStamp){
var now = new Date().getTime();
var diffValue = now - dateTimeStamp;
if( diffValue //날짜가 일치하지 않으면 팝업창으로 알림
//alert("종료일은 시작일보다 이전일 수 없습니다!");
}
var MonthC =diffValue/month;
var weekC =diffValue/(7*day);
var dayC =diffValue/day;
var hourC =diffValue/hour;
var minC =diffValue/분;
if(monthC>= 1){
result="게시 날짜" parsInt(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="게시 날짜" parsInt(minC) "분 전";
}else
result="방금 게시됨";
결과 반환;
}

얻은 시간 형식이 타임스탬프가 아닌 경우 다음 JavaScript 함수를 사용하여 문자열을 타임스탬프로 변환할 수 있습니다. 이 함수의 기능은 JS 버전의 strtotime과 동일합니다.

코드 복사 코드는 다음과 같습니다.

//js 함수 코드: 문자열을 타임스탬프로 변환
function getDateTimeStamp( dateStr){
return Date.parse(dateStr.replace(/-/gi,"/"));
}

예제 2:

코드 복사 코드는 다음과 같습니다.

function jsDateDiff(publishTime){                                                                                                                                     d = timeNow - 게시 시간;
d_days = parseInt(d/86400); d_hours =parseInt(d/3600); days>0 && d_days< 4 ){  else if(d_hours<=0 && d_분>0){                                                          s.getFullYear() "연도"
반환(s. getMonth() 1) "월" s.getDate() "일"
} }
}




2. jquery 플러그인 구현

HTML 코드:




코드 복사


코드는 다음과 같습니다.


">

통화 코드:


코드 복사 코드는 다음과 같습니다.
jQuery(" span.timeago ").timeago();

플러그인 소스 코드:

코드 복사 코드는 다음과 같습니다.

(function (factory) {
  if (typeof 정의 === 'function' && 정의.amd) {
    // AMD. 익명 모듈로 등록합니다.
    정의([ 'jquery'], Factory);
  } else {
    // 브라우저 전역
    Factory(jQuery);
  }
}(함수 ($) {
  $.timeago = function(timestamp) {
    if (타임스탬프 인스턴스of Date) {
      return inWords(timestamp);
    } else if (typeof timestamp === "string") {
      return inWords($.timeago .parse(타임스탬프));
    } else if (타임스탬프 유형 === "숫자") {
      return inWords(새 날짜(타임스탬프));
    } else {
      return inWords($ .timeago.datetime(timestamp));
    }
  };
  var $t = $.timeago;

  $.extend($.timeago, {
    설정: {
     refreshMillis: 60000,
     allowFuture: false,
      localeTitle: false,
      cutoff: 0,
      문자열: {
       Ago: null,       FromNow: null,
        suffixAgo: "前",
        suffixFromNow: "지금부터",
        초: "1分钟",
        분: "1分钟",
        분: "%d分钟",
        시: "1소기",
        시: "%d소기",
        일: "1천",
        일: "%d천",
        월: "1월",
        개월: "%d月",
        년: "1년",
        년: "%d年",
        wordSeparator: "",
        숫자: []
}
    },
    inWords: function(distanceMillis) {
      var $l = this.settings.strings;
      var prefix = $l.prefixAgo;
      var suffix = $l.suffixAgo ;
      if (this.settings.allowFuture) {
        if (distanceMillis < 0) {
          접두사 = $l.prefixFromNow;
          접미사 = $l.suffixFromNow;
       }
      }

      var 초 = Math.abs(distanceMillis) / 100 0;
      var 분 = 초 / 60;
      var 시간 = 분 / 60;
      var 일 = 시간 / 24;
      var 년 = 일 / 365;

      함수 대체(stringOrFunction, 번호) {
        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
        var value = ($l.numbers && $l.numbers[number]) || number;
        return string.replace(/%d/i, value);
      }

      var 단어 = 초 < 45 && 대체($l.초, Math.round(초)) ||
        초 < 90 && 대체($l.분, 1) ||
        분 < 45 && 대입($l.분, Math.round(분)) ||
        분 < 90 && 대체($l.시간, 1) ||
        시간 < 24 && 대입($l.hours, Math.round(hours)) ||
        시간 < 42 && 대체($l.day, 1) ||
        일 < 30 && 대체($l.days, Math.round(days)) ||
        일 < 45 && 대체($l.월, 1) ||
        일 < 365 && 대체($l.개월, Math.round(일 / 30)) ||
        년 < 1.5 && 대체($l.연도, 1) ||
        대체($l.년, Math.round(년));

      var 구분 기호 = $l.wordSeparator || "";
      if ($l.wordSeparator === 정의되지 않음) { 구분 기호 = " "; }
      return $.trim([접두사, 단어, 접미사].join(구분 기호));
    },
    구문 분석: function(iso8601) {
      var s = $.trim(iso8601) ;
      s = s.replace(/.d /,""); // 밀리초 제거
      s = s.replace(/-/,"/").replace(/-/,"/");
      s = s.replace(/T/," "). 교체(/Z/," UTC");
      s = s.replace(/([ -]dd):?(dd)/," $1$2"); // -04:00 -> -0400
      새 날짜 반환;
    },
    datetime: function(elem) {
      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
      return $t.parse(iso8601);
    },
    isTime: function(elem) {
      // jQuery의 `is()`는 IE의 HTML5에서 제대로 작동하지 않습니다
      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
    }
  });

  // ​​$(el).timeago('action')  // ​​작업이 제공되지 않으면 init가 기본값입니다
  // ​​단일 요소의 컨텍스트로 함수가 호출됩니다.
  var function = {
    init: function(){
      var Refresh_el = $. 프록시(새로 고침, this);
      새로 고침_el();
      var $s = $t.settings;
      if ($s.refreshMillis > 0) {
        setInterval(refresh_el, $s. RefreshMillis);
      }
    },
    업데이트: function(time){
      $(this).data('timeago', { datetime: $t.parse(time) });
      새로고침.apply(this);
    },
    updateFromDOM: function(){
      $(this).data('timeago', { datetime: $t.parse( $t.isTime( this) ? $(this).attr("datetime") : $(this).attr("title") ) });
      새로고침.apply(this);
    }
  };

  $.fn.timeago = 함수(액션, 옵션) {
    var fn = 액션 ? function[action] : function.init;
    if(!fn){
      throw new Error("Unknown function name '" action "' for timeago");
    }
    // 각각 끝 여기에 개체를 지정하고 요청된 함수를 호출합니다
    this.each(function(){
      fn.call(this, options);
    });
    return this;
  };

  함수 새로 고침() {
    var data = prepareData(this);
    var $s = $t.settings;

    if (!isNaN(data.datetime)) {
      if ( $s.cutoff == 0 || distance(data.datetime) < $s.cutoff) {
        $(this).text(inWords(data.datetime));
      }
    }
    return this;
  }

  function prepareData(element) {
    element = $(element);
    if (!element.data("timeago")) {
      element.data("timeago", { 날짜시간: $t.datetime(element) });
      var text = $.trim(element.text());
      if ($t.settings.localeTitle) {
        element.attr("title", element.data('timeago' ).datetime.toLocaleString());
      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
        element.attr ("title", text);
      }
    }
    return element.data("timeago");
  }

  function inWords(date) {
    return $ t.inWords(거리(날짜));
  }

  함수 거리(날짜) {
    return (new Date().getTime() - date.getTime());
}

  // ​​IE6 문제 수정
  document.createElement("abbr");
  document.createElement("time");
}));
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.