dateDiff返回错误的值

Mic*_*ael 7 coldfusion coldfusion-11

我有一个名为变量的变量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,这是太多秒.任何人都可以解释为什么会这样吗?我认为这可能是一个时区问题,但我无法理解它.

Repro代码

<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)#">
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 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>
Run Code Online (Sandbox Code Playgroud)