2011-01-12 25 views
2

私たちは現在、人が当サイトにいる時間を追跡しています。24時間以上の時間フォーマットを使用するColdfusion DateDiff

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 is an invalid date or time string.

この問題を解決する方法についてのご意見はありがとうございます。ありがとうございます。

+0

時間変数はどのように戻されますか?文字列、または部分(h、m、s)として?これらはどのように構築されていますか? –

+0

これらは文字列として渡され、varcharとしてDBに格納されます。 – RandyLahey

答えて

6

オプション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)> 
関連する問題