2014-12-20 4 views
7

parseDateTime을 사용하여 생성 된 ColdFusion 날짜/시간 객체가 포함 된 date1이라는 변수가 있습니다. 변수를 덤프하면 {ts '2014-12-20 15:46:57'}이됩니다.잘못된 값을 반환하는 dateDiff

dateConvert("local2utc",now())에 의해 생성 된 다른 ColdFusion 날짜/시간 객체를 포함하는 date2이라는 또 다른 변수가 있습니다. 변수를 덤프하면 {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)#"> 
+1

붙여 넣기를 게시하여 문제를 다시 만들 수 있습니까? –

+0

아니요,보고있는 내용을 보여주는 재현 사례를 보지 않고도 한 가지 또는 다른 방법으로 의견을 제시 할 수는 없습니다. Pls가이 문서 및 링크 된 문서를 읽었습니다. http://blog.adamcameron.me/2013/09/short-self-contained-correct-compilable.html –

+4

UTC-6 인 TZ에있는 것으로 의심됩니다. Google에 CF 버그 (https://www.google.co.uk/search?q=bugbase.adobe.com+dateConvert)가있는 경우 dateConvert()와 함께 여러 번 문제가 발생하여 같은 시간대에있는 것처럼 보입니다. 당신이보고있는 것의. Adobe는 이러한 문제를 해결했다고 주장하지만 결코 그렇게 확신하지는 않습니다. 첫 번째 날짜가 로컬 TZ에 있고 두 번째 날짜가 UTC로 판단되므로 dateAdd() 결과에 해당 오프셋이 반영된 것입니다. 왜 TZ diff가''에 보이지 않습니까? 던노. 그래도 나를 놀라게하지 않습니다. –

답변

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> 
관련 문제