Home > Software engineering >  Coldfusion calculate seconds in days, hours, min
Coldfusion calculate seconds in days, hours, min

Time:03-08

I want to convert seconds to days, hours and minutes Currently, it works just for hours and minutes but not for days. Can you please support me tell me what I did wrong:

<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>

For the value 87400 the expected result is

  • 1 Days, 0 hours, 16 minutes

If I take 94152 seconds it will be:

  • 1 days, 3 hours, 22 minutes

The only issue i have is to get the correct days ... hours and minutes are diplayed but not the correct days

thank you for all the support thank you for all the support

CodePudding user response:

A simple way to calculate the intervals is by taking advantage of the modulus operator:

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

For 94152 seconds, the results would be:

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

demo trycf.com

CodePudding user response:

I understand from your question that you don't need to get a certain date and time along a timeline, but convert a total amount of seconds in days, hours and minutes. To do that you don't necessary need to use cfml time and date functions like CreateTime() or DateAdd(). You just may need these in order to get a reference point of time or date along a timeline, which doesn't seem to be the case, otherwise you would know the value of your starting date variable. Thus, you can solve this with plain rule of three. There may be simpler methods, so I'm posting an alternative only.

We know that:

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

Thus, your calcualtion within cfml could be like so:

<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>

That outputs:

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