dateDiff返回错误的值

时间:2014-12-20 15:58:43

标签: coldfusion coldfusion-11

我有一个名为date1的变量,它包含使用parseDateTime生成的ColdFusion日期/时间对象。当我转储变量时,我得到{ts '2014-12-20 15:46:57'}

我有另一个名为date2的变量,它包含由dateConvert("local2utc",now())生成的另一个ColdFusion日期/时间对象。当我转储变量时,我得到{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)#">

2 个答案:

答案 0 :(得分:6)

此问题的原因似乎是由于https://bugbase.adobe.com/index.cfm?event=bug&id=3338974中描述的错误。

如上面的URL&#39;所述,从DateConvert返回的变量(&#34; local2Utc&#34;,now())似乎带有从本地到UTC的偏移量。什么时候,你使用该变量几乎任何东西(包括cfqueryparam),你得到的值取决于偏移量(即回到你传入的值)&#39;。

解决方法似乎是在转换后将日期转换为字符串。我为此创建了一个简单的包装函数,如下所示:

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

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

</cffunction>

答案 1 :(得分:0)

另一个解决方法是使用parseDateTime。

<cfset localDate = now()>
<cfset utcDate = DateConvert("local2utc", localDate)> 
<cfset utcfix = parseDateTime(utcDate)> 

utc epoch: #DateDiff("s", "January 1 1970 00:00", utcfix)#<br>
loc epoch: #DateDiff("s", "January 1 1970 00:00", localDate)#