Coldfusion 以天、小时、分钟计算秒数

Coldfusion calculate seconds in days, hours, min

我想将秒转换为天、小时和分钟 目前,它只能工作几小时和几分钟,而不是几天。你能支持我吗?告诉我我做错了什么:

<cfscript>
    seconds = '87400';
    midnight = CreateTime(0,0,0);
    time = DateAdd("s", seconds, variables.midnight);
    date= xxxxxxxxxxxxxxxxxxxxx???
</cfscript>

<cfoutput>
    #DateFormat(variables.date, 'd')#  not working 
    #TimeFormat(variables.time, 'HH:mm')#
</cfoutput>

对于值87400,预期结果是

如果我用 94152 秒,它将是:

我唯一的问题是获得正确的日期...显示的是小时和分钟,但不是正确的日期

感谢大家的支持

我从你的问题中了解到,你不需要沿着时间轴获取特定的日期和时间,而是将总秒数转换为天、小时和分钟。为此,您不必使用 cfml 时间和日期函数,如 CreateTime() 或 DateAdd()。您可能只需要这些以便沿着时间轴获得参考时间点或日期,但事实并非如此,否则您会知道起始 date 变量的值。因此,你可以用简单的三法则来解决这个问题。可能有更简单的方法,所以我只发布一个替代方法。

我们知道:

    60 seconds is equivalent to 1 minute
    60 minutes is equivalent to 1 hour
    24 hours is equivalent to 1 day

因此,您在 cfml 中的计算可能是这样的:

<cfscript>
    //Constants for calculation
    secondsPerDay= 60*60*24;
    secondsPerHour= 60*60;
    secondsPerMinute= 60;

    //Seconds to convert
    secondsTotal=87400;
     
    // temp variable
    secondsRemain= secondsTotal;
    
    days= int( secondsRemain / secondsPerDay);
    secondsRemain= secondsRemain - days * secondsPerDay;
    hours= int( secondsRemain / secondsPerHour);
    secondsRemain= secondsRemain - hours * secondsPerHour;
    minutes= int( secondsRemain / secondsPerMinute);
    secondsRemain= secondsRemain - minutes * secondsPerMinute;

    writeoutput( "#secondsTotal# seconds are: #days# days, #hours# hours, #minutes# minutes and #secondsRemain# seconds." );

</cfscript>

输出:

87400 seconds are: 1 days, 0 hours, 16 minutes and 40 seconds.

计算间隔的一种简单方法是利用 modulus operator:

totalSeconds  = 94152;
days = int(totalSeconds / 86400); 
hours = totalSeconds / 3600 % 24; 
minutes = totalSeconds / 60 % 60; 
seconds = totalSeconds % 60;

94152 秒后,结果为:

Interval Value
DAYS 1
HOURS 2
MINUTES 9
SECONDS 12
TOTALSECONDS 94152

demo trycf.com