Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 可以更有效地编写此日期时间函数吗?_Datetime_Coldfusion - Fatal编程技术网

Datetime 可以更有效地编写此日期时间函数吗?

Datetime 可以更有效地编写此日期时间函数吗?,datetime,coldfusion,Datetime,Coldfusion,以下函数以文字(字符串形式)返回两个日期时间值之间的差值。它能写得更高效/优雅吗 /** * @hint Returns the difference between two time strings in words. */ public string function timeAgoInWords(required date fromTime, date toTime=now()) { local.secondDiff = dateDiff("s", arguments.fromTi

以下函数以文字(字符串形式)返回两个日期时间值之间的差值。它能写得更高效/优雅吗

/**
* @hint Returns the difference between two time strings in words.
*/
public string function timeAgoInWords(required date fromTime, date toTime=now())
{
    local.secondDiff = dateDiff("s", arguments.fromTime, arguments.toTime);

    if (local.secondDiff <= 60)
        return "#local.secondDiff# seconds ago";

    local.minuteDiff = dateDiff("n", arguments.fromTime, arguments.toTime);

    if (local.minuteDiff <= 60)
        if (local.minuteDiff < 2)
            return "1 minute ago";
        else return "#local.minuteDiff# minutes ago";

    if (local.minuteDiff <= 1440)
        if (local.minuteDiff <= 120)
            return "1 hour ago";
        else return "#int(local.minuteDiff/60)# hours ago";

    if (local.minuteDiff <= 2880)
        return "yesterday";

    if (local.minuteDiff <= 4320)
        return "2 days ago";

    local.monthDiff = dateDiff("m", arguments.fromTime, arguments.toTime);

    if (local.monthDiff <= 12)
        return "#dateFormat(arguments.fromTime, "mmm dd")# at #timeFormat(arguments.fromTime, "h:mm")#";

    return "#dateFormat(arguments.fromTime, "mmm dd 'yy")# at #timeFormat(arguments.fromTime, "h:mm")#";
}
/**
*@hint返回两个时间字符串之间的差值(以单词表示)。
*/
公共字符串函数timeAgoInWords(所需日期fromTime,日期toTime=now())
{
local.secondDiff=dateDiff(“s”,arguments.fromTime,arguments.toTime);

如果(local.secondDiff我觉得不错。您可以在所有测试中使用第一个diff(local.secondDiff),而不是重新进行diff,但这可能更容易阅读。

我觉得不错。您可以使用第一个diff(local.secondDiff)这是我几个月前写的,基于上面评论中发布的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";
}
string函数之前(必需的日期)
{
var dateparts=[“yyyy”、“m”、“d”、“h”、“n”];
var datepartNames=[“年”、“月”、“日”、“小时”、“分钟”];
var rightNow=Now();
对于(变量i=1;i 1)
返回“#diff##datepartNames[i]#s ago”;
如果(差异==1)
返回“#diff##datepartNames[i]#ago”;
}
返回“刚才”;
}

这是我几个月前写的,基于上面评论中发布的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";
}
string函数之前(必需的日期)
{
var dateparts=[“yyyy”、“m”、“d”、“h”、“n”];
var datepartNames=[“年”、“月”、“日”、“小时”、“分钟”];
var rightNow=Now();
对于(变量i=1;i 1)
返回“#diff##datepartNames[i]#s ago”;
如果(差异==1)
返回“#diff##datepartNames[i]#ago”;
}
返回“刚才”;
}

我不知道它是否更有效,但有人已经编写了一个UDF,它可以做到这一点:@Al,谢谢……使用循环看起来很奇怪……按照我所写的内容写一些东西难道不是更有意义吗?循环中的值是什么?哦,顺便说一句,默认情况下,你根本不需要@hint。@Henry,谢谢。我更喜欢我写的东西t、 它对函数有任何影响吗?不管你是否使用@hint都没有影响…只是输入更少,更干净,尤其是当你在块中只有一个提示的时候。我不知道它是否更有效,但有人已经写了一个UDF来做这件事:@Al,谢谢…使用循环看起来很奇怪…它不是更有用吗我想按照我写的内容写点什么?循环中的值是什么?哦,顺便说一句,默认情况下你根本不需要@hint。@亨利,谢谢。我更喜欢它。它对函数有任何影响吗?不管你是否使用@hint都没有影响…只是少输入和更干净,尤其是当你在块中只有一个提示时。谢谢,我好极了。该函数每页将被调用大约50次,因此不使用数组可能是一种更好的方法?不过,这种方法更简洁、易读。谢谢您的示例。@Mohamad,如果您愿意,您可以将该UDF放入CFC,并将两个数组缓存在变量范围内。然后将单例CFC放入应用程序范围内。谢谢,这看起来不错。该函数每页大约调用50次,因此,如果不使用数组,这可能是一种更好的方法。不过,这种方法更简洁、易读。谢谢您的示例。@Mohamad,如果您愿意,您可以将该UDF放入CFC,并将两个数组缓存在变量范围内。然后将单例CFC放入您的应用程序中适用范围。