7

date1を使用して生成された ColdFusion 日付/時刻オブジェクトを含むという変数がありますparseDateTime。変数をダンプすると、{ts '2014-12-20 15:46:57'}.

date2によって生成された別の ColdFusion 日付/時刻オブジェクトを含む、別の変数が呼び出されていますdateConvert("local2utc",now())。変数をダンプすると、{ts '2014-12-20 15:49:40'}.

しかし、私がそうするdateDiff("s",date1,date2)と、-21436 を取得します。これは、秒数が多すぎます。なぜこれが起こっているのか誰にも説明できますか?タイムゾーンの問題かもしれないと思いますが、頭に浮かびません。

再現コード

<cfset dtString = "Saturday, December 20, 2014 05:07:30 PM">

<cfset dtObject = parseDateTime(dtString)>

<cfdump var="#dtObject#">

<cfset utcNow = dateConvert("local2utc",now())>

<br><br><cfdump var="#utcNow#">

<br><br><cfdump var="#dateDiff("s",dtObject,utcNow)#">
4

2 に答える 2

6

この問題の原因は、https://bugbase.adobe.com/index.cfm?event=bug&id=3338974 に記載されているバグによるものと思われます

上記の URL で説明されているように、「DateConvert("local2Utc",now()) から返される変数は、ローカルから UTC へのオフセットを保持しているようです。その変数をほぼすべてのもの (cfqueryparam を含む) に使用すると、返される値はオフセットの量だけずれます (つまり、渡した値に戻ります)。

回避策は、変換後に日付を文字列に変換することのようです。このための単純なラッパー関数を次のように作成しました。

<cffunction name="local2utc" output="no">
    <cfargument name="date">

    <cfreturn dateConvert("local2utc",arguments.date).toString()>

</cffunction>
于 2014-12-21T20:04:29.220 に答える