2014-12-04 3 views
0

나는 타임 스탬프를 표시하기 위해 jquery.timeago 플러그인을 사용하고 있습니다. 오늘은 Today 06:56으로 표시되도록 수정했습니다. 그리고 잘 작동합니다. 제발 봐봐 this fiddle일 수와 개월 수를 기준으로 타임 스탬프를 표시 하시겠습니까?

지금은 Monday 06:56 3 일 전으로 표시하고 싶습니다. 따라서 3 일보다 오래된 타임 스탬프는 dayname time and time-stamps older than 3 months it should be dd-mmm-yyyy` 형식으로 표시하려고합니다.

substitute()의 수정 사항은 jquery.timeago입니다.

function substitute(stringOrFunction, number) { 

     var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; 
     var value = ($l.numbers && $l.numbers[number]) || number; 
     debugger; 
     if (string == "days") { 
      var daylessthree = dayNames[value] + (' 0' + Math.round(hours)).slice(-2) + ":" + (' 0' + Math.round(minutes)).slice(-2); 
      return (string = daylessthree); 
      //return string.replace(/%d/i, dayNames[value]); 
     } 
     else if (string == "Today") { 
      var tod = (' 0' + Math.round(hours)).slice(-2) + ":" + (' 0' + Math.round(minutes)).slice(-2); 
      return (string = "Today " + tod); 
     } 
     return string.replace(/%d/i, value); 
     } 

어떻게 3 일 특정 형식으로 3 개월 이상 이전의 타임 스탬프를 표시 할 ???

답변

0

다음과 같은 요구 사항에 대한 jquery.timeago 플러그인의 코드를 검색 : 를 - 그것은 Today <time>, 를 표시해야합니다 오늘 - 그것은 <Dayname> <time>해야이 지난 3 일, 을 - 3 개월 이상 된 것이되어야한다 DD-MON-YYYY 및 - 나이 1.5 년 동안은 YYYY

/** 
* Timeago is a jQuery plugin that makes it easy to support automatically 
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). 
* 
* @name timeago 
* @version 1.4.1 
* @requires jQuery v1.2.3+ 
* @author Ryan McGeary 
* @license MIT License - http://www.opensource.org/licenses/mit-license.php 
* 
* For usage and examples, visit: 
* http://timeago.yarp.com/ 
* 
* Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) 
*/ 

(function (factory) { 
    if (typeof define === 'function' && define.amd) { 
    // AMD. Register as an anonymous module. 
    define(['jquery'], factory); 
    } else { 
    // Browser globals 
    factory(jQuery); 
    } 
}(function ($) { 
    $.timeago = function (timestamp) { 
    if (timestamp instanceof Date) { 
     return inWords(timestamp); 
    } else if (typeof timestamp === "string") { 
     return inWords($.timeago.parse(timestamp)); 
    } else if (typeof timestamp === "number") { 
     return inWords(new Date(timestamp)); 
    } else { 
     return inWords($.timeago.datetime(timestamp)); 
    } 
    }; 
    var $t = $.timeago; var dayNames = ['Sunday', "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 
    var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
    $.extend($.timeago, { 
    settings: { 
     refreshMillis: 60000, 
     allowPast: true, 
     allowFuture: false, 
     localeTitle: false, 
     cutoff: 0, 
     strings: { 
     prefixAgo: null, 
     prefixFromNow: null, 
     suffixAgo: "ago", 
     suffixFromNow: "from now", 
     inPast: 'any moment now', 
     seconds: "Today", 
     minute: "Today", 
     minutes: "Today", 
     hour: "Today", 
     hours: "Today", 
     //seconds: "less than a minute", 
     //minute: "about a minute", 
     //minutes: "%d minutes", 
     //hour: "about an hour", 
     //hours: "about %d hours", 
     day: "days", 
     days: "days", 
     month: "about a month", 
     months: "months", 
     year: "about a year", 
     years: "years", 
     wordSeparator: " ", 
     numbers: [] 
     } 
    }, 

    inWords: function (distanceMillis, date) { 
     var newDate = date; 

     if(!this.settings.allowPast && ! this.settings.allowFuture) { 
      throw 'timeago allowPast and allowFuture settings can not both be set to false.'; 
     } 

     var $l = this.settings.strings; 
     var prefix = $l.prefixAgo; 
     var suffix = $l.suffixAgo; 
     if (this.settings.allowFuture) { 
     if (distanceMillis < 0) { 
      prefix = $l.prefixFromNow; 
      suffix = $l.suffixFromNow; 
     } 
     } 

     if(!this.settings.allowPast && distanceMillis >= 0) { 
     return this.settings.strings.inPast; 
     } 

     var seconds = Math.abs(distanceMillis)/1000; 
     var minutes = seconds/60; 
     var hours = minutes/60; 
     var days = hours/24; 
     var years = days/365; 

     function substitute(stringOrFunction, number) { 

     var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; 
     var value = ($l.numbers && $l.numbers[number]) || number; 

     if (string == "days") { 
      var daylessthree = dayNames[newDate.getDay()] + ' ' + (' 0' + newDate.getHours()).slice(-2) + ":" + (' 0' + newDate.getMinutes()).slice(-2); 
      return (string = daylessthree); 
     } 
     else if (string == "Today") { 
      var tod = (' 0' + newDate.getHours()).slice(-2) + ":" + (' 0' + newDate.getMinutes()).slice(-2); 
      return (string = "Today " + tod); 
     } 
     else if (string == "months") { 
      var monthlessthree = (' 0' + newDate.getDate()).slice(-2) + "-" + monthNames[newDate.getMonth()] + "-" + (' 0' + Math.round(newDate.getYear())).slice(-2); 
      return (string = monthlessthree); 
     } 
     else if (string == "years") {    
      return (newDate.getFullYear()); 
     } 
     return string.replace(/%d/i, value); 
     } 

     var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || 
     seconds < 90 && substitute($l.minute, 1) || 
     minutes < 45 && substitute($l.minutes, Math.round(minutes)) || 
     minutes < 90 && substitute($l.hour, 1) || 
     hours < 24 && substitute($l.hours, Math.round(hours)) || 
     hours < 42 && substitute($l.day, 1) || 
     days < 3 && substitute($l.days, Math.round(days)) || 
     days < 30 && substitute($l.days, Math.round(days)) || 
     days < 45 && substitute($l.month, 1) || 
     //days < 90 && substitute($l.days, Math.round(days)) || 
     days < 365 && substitute($l.months, Math.round(days/30)) || 
     years < 1.5 && substitute($l.year, 1) || 
     substitute($l.years, Math.round(years)); 

     var separator = $l.wordSeparator || ""; 
     if ($l.wordSeparator === undefined) { separator = " "; } 
     //return $.trim([prefix, words, suffix].join(separator)); 
     return $.trim([words].join(separator)); 
    }, 

    //parse: function(iso8601) { 
    // var s = $.trim(iso8601); 
    // s = s.replace(/\.\d+/,""); // remove milliseconds 
    // s = s.replace(/-/,"/").replace(/-/,"/"); 
    // s = s.replace(/T/," ").replace(/Z/," UTC"); 
    // s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 
    // s = s.replace(/([\+\-]\d\d)$/, " $100"); // +09 -> +0900 
    // return new Date(s); 
     //}, 

    parse: function (iso8601) { 
     if ((iso8601 - 0) == iso8601 && iso8601.length > 0) { // Checks if iso8601 is a unix timestamp 
      var s = new Date(iso8601); 
      if (isNaN(s.getTime())) { // Checks if iso8601 is formatted in milliseconds 
       var s = new Date(iso8601 * 1000); //if not, add milliseconds 
      } 
      return s; 
     } 

     var s = $.trim(iso8601); 
     s = s.replace(/-/, "/").replace(/-/, "/"); 
     s = s.replace(/T/, " ").replace(/Z/, " UTC"); 
     s = s.replace(/([\+-]\d\d)\:?(\d\d)/, " $1$2"); // -04:00 -> -0400 
     return new Date(s); 
    }, 
    datetime: function (elem) { 
     var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); 
     return $t.parse(iso8601); 
    }, 
    isTime: function(elem) { 
     // jQuery's `is()` doesn't play well with HTML5 in IE 
     return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); 
    } 
    }); 

    // functions that can be called via $(el).timeago('action') 
    // init is default when no action is given 
    // functions are called with context of a single element 
    var functions = { 
    init: function(){ 
     var refresh_el = $.proxy(refresh, this); 
     refresh_el(); 
     var $s = $t.settings; 
     if ($s.refreshMillis > 0) { 
     this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis); 
     } 
    }, 
    update: function(time){ 
     var parsedTime = $t.parse(time); 
     $(this).data('timeago', { datetime: parsedTime }); 
     if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString()); 
     refresh.apply(this); 
    }, 
    updateFromDOM: function(){ 
     $(this).data('timeago', { datetime: $t.parse($t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title")) }); 
     refresh.apply(this); 
    }, 
    dispose: function() { 
     if (this._timeagoInterval) { 
     window.clearInterval(this._timeagoInterval); 
     this._timeagoInterval = null; 
     } 
    } 
    }; 

    $.fn.timeago = function(action, options) { 
    var fn = action ? functions[action] : functions.init; 
    if(!fn){ 
     throw new Error("Unknown function name '"+ action +"' for timeago"); 
    } 
    // each over objects here and call the requested function 
    this.each(function(){ 
     fn.call(this, options); 
    }); 
    return this; 
    }; 

    function refresh() { 
    var data = prepareData(this); 
    var $s = $t.settings; 

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

    function prepareData(element) { 
    element = $(element); 
    if (!element.data("timeago")) { 
     element.data("timeago", { datetime: $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(distance(date), date); 
    } 

    function distance(date) { 
    return (new Date().getTime() - date.getTime()); 
    } 

    // fix for IE6 suckage 
    document.createElement("abbr"); 
    document.createElement("time"); 
})); 

Working fiddle

+0

당신이 예를 제공하십시오 수 있어야한다 페이지가로드 된 후 DOM에 추가 된 항목에 대해이 작업을 수행합니다. 예 : AJAX에서로드 된 항목 – JasonDavis

관련 문제