7

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

我有另一个名为的变量date2,其中包含另一个由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 回答
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)#
于 2018-03-27T17:55:58.227 回答