Coldfusion DateDiff с использованием формата времени более 24 часов - PullRequest
2 голосов
/ 12 января 2011

В настоящее время я отслеживаю количество людей, посещающих наш сайт.

Для каждого пользователя установлено время, будь то 00:10:00 (10 минут) или 100: 00: 00 (100 часов).

Проблема возникает, когда я использую эту строку кода:

<cfset seconds_left = datediff("s",variables.time_used,form.site_time)>

Если любая из этих переменных превышает 24 часа (24:00:00), она выдаст ошибку:

40: 00: 00 - недопустимая дата или время строка.

Любые предложения о том, как решить эту проблему, было бы замечательно, спасибо!

1 Ответ

6 голосов
/ 12 января 2011

Опция 1 : отслеживать допустимые значения даты и времени. При входе в систему (или первом посещении) установите <cfset session.start_time = now()>. Для определения продолжительности расчет таков:

<cfset duration = dateDiff("s", session.start_time, now()))>

Опция 2 : перевод значений времени, с которыми вы работаете, в секунды и простое вычитание.

<cffunction name="ts2secs" output="false" access="public" returntype="numeric" hint="Take a time string and return number of seconds">
    <cfargument name="ts" type="string" required="true" hint="formated as h:m:s"/>
    <cfset var local = structNew()/>
    <cfset var pieces = listToArray(arguments.ts, ":")>
    <cfset var hours = pieces[1]>
    <cfset var minutes = pieces[2]>
    <cfset var seconds = pieces[3]>
    <cfreturn (hours * 60 * 60) + (minutes * 60) + seconds>
</cffunction>

<cfset duration = ts2secs(variables.time_used) - ts2secs(form.site_time)>
...