我有一个名为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)#">
答案 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)#