Pour réaliser des fonctions similaires, vous pouvez utiliser JS La méthode d'implémentation est la suivante :
1. Implémentation de la fonction JavaScript :
Exemple 1 :
Si le format d'heure que vous obtenez n'est pas un horodatage, vous pouvez utiliser la fonction JavaScript suivante pour convertir la chaîne en horodatage. La fonction de cette fonction est équivalente à la version JS de strtotime :
2. Implémentation du plug-in jquery
Code source du plug-in :
(function (factory) {
if (typeof definition === 'function' && definition.amd) {
// AMD. Enregistrez-vous en tant que module anonyme.
definition([ 'jquery'], usine);
} else {
// Paramètres globaux du navigateur
usine(jQuery);
}
}(fonction ($) {
$.timeago = function(timestamp) {
if (horodatage 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;
$.extend($.timeago, {
paramètres : {
rafraîchirMillis : 60000,
allowFuture : faux,
localeTitle : faux,
cutoff : 0,
chaînes : {
préfixeAgo : null,
préfixeFromNow : null,
suffixAgo : "前",
suffixFromNow : "à partir de maintenant",
secondes : "1分钟",
minute : "1分钟",
minutes : "%d分钟",
heure : "1小时",
heures : "%d小时",
jour : "1天",
jours : "%d天",
mois : "1月",
mois : "%d月",
année : "1年",
années : "%d年",
wordSeparator : "",
chiffres : []
}
},
inWords : function(distanceMillis) {
var $l = this.settings.strings;
var prefix = $l.prefixAgo;
var suffix = $l.suffixAgo ;
if (this.settings.allowFuture) {
if (distanceMillis < 0) {
préfixe = $l.prefixFromNow;
suffix = $l.suffixFromNow;
}
}
var secondes = Math.abs(distanceMillis) / 1000;
var minutes = secondes / 60;
var heures = minutes / 60;
var jours = heures / 24;
var années = jours / 365;
function substitut(stringOrFunction, nombre) {
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
var value = ($l.numbers && $l.numbers[number]) || nombre;
return string.replace(/%d/i, value);
}
var mots = secondes < 45 && substitut($l.seconds, Math.round(seconds)) ||
secondes < 90 && substitut($l.minute, 1) ||
minutes < 45 && substitut($l.minutes, Math.round(minutes)) ||
minutes < 90 && substitut($l.hour, 1) ||
heures < 24 && substitut($l.hours, Math.round(hours)) ||
heures < 42 && substitut($l.day, 1) ||
jours < 30 && substitut($l.days, Math.round(days)) ||
jours < 45 && substitut($l.mois, 1) ||
jours < 365 && substitut($l.months, Math.round(days / 30)) ||
ans < 1.5 && substitut($l.année, 1) ||
substitut($l.années, Math.round(ans));
var separator = $l.wordSeparator || "";
if ($l.wordSeparator === non défini) { separator = " "; }
return $.trim([préfixe, mots, suffixe].join(separator));
},
parse : function(iso8601) {
var s = $.trim(iso8601) ;
s = s.replace(/.d /,""); // supprime les millisecondes
s = s.replace(/-/,"/").replace(/-/,"/");
s = s.replace(/T/," "). replace(/Z/," UTC");
s = s.replace(/([ -]dd):?(dd)/," $1$2"); // -04:00 -> -0400
renvoie une nouvelle date(s);
},
datetime : function(elem) {
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
return $t.parse(iso8601);
},
isTime : function(elem) {
// `is()` de jQuery ne fonctionne pas bien avec HTML5 dans IE
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
}
});
// fonctions pouvant être appelées via $(el).timeago('action')
// init est la valeur par défaut lorsqu'aucune action n'est donnée
// les fonctions sont appelées avec le contexte d'un seul élément
var function = {
init: function(){
var rafraîchir_el = $. proxy(refresh, this);
fresh_el();
var $s = $t.settings;
if ($s.refreshMillis > 0) {
setInterval(refresh_el, $s. rafraîchirMillis);
}
},
update : function(time){
$(this).data('timeago', { datetime: $t.parse(time) });
rafraîchir.apply(this);
},
updateFromDOM: function(){
$(this).data('timeago', { datetime: $t.parse( $t.isTime( this) ? $(this).attr("datetime") : $(this).attr("title") ) });
rafraîchir.apply(this);
}
};
$.fn.timeago = function(action, options) {
var fn = action ? function[action] : function.init;
if(!fn){
throw new Error("Nom de fonction inconnu '" action "' pour timeago");
}
// chacun sur objets ici et appelez la fonction demandée
this.each(function(){
fn.call(this, options);
});
return this;
};
function rafraîchir() {
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));
}
>
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 ("titre", texte);
}
}
return element.data("timeago");
}
function inWords(date) {
return $ t.inWords(distance(date));
}
fonction distance(date) {
return (new Date().getTime() - date.getTime());
}
// Correction du problème de succion d'IE6
document.createElement("abbr");
document.createElement("time");
}));