Coldfusion DateDiff с использованием формата времени более 24 часов
В настоящее время я отслеживаю количество времени, которое люди посещают на нашем сайте.
Для каждого пользователя установлено время, будь то 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 ответ
Решение
Вариант 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)>