Это то, что я написал несколько месяцев назад на основе UDF Al Everett, опубликованного выше в комментарии и написанного в стиле сценария CF9. Это не будет более эффективным. Фактически, он должен быть медленнее, чем ваша реализация, потому что он имеет несколько вызовов на dateDiff()
, и ему нужно предварительно настроить 2 массива, но общее количество строк короче и легко понятно.
string function ago(required Date dateThen)
{
var dateparts = ["yyyy","m","d","h","n"];
var datepartNames = ["year","month","day","hour","minute"];
var rightNow = Now();
for (var i = 1; i <= 5; i++) // 5 == arrayLen(dateparts)
{
var diff = dateDiff(variables.dateparts[i], dateThen, rightNow);
if (diff > 1)
return "#diff# #datepartNames[i]#s ago";
if (diff == 1)
return "#diff# #datepartNames[i]# ago";
}
return "Just Now";
}