2014-12-20 12 views
7

मेरे पास date1 नामक एक चर है जिसमें 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)#"> 
+1

क्या आप एक रेपो केस पोस्ट कर सकते हैं, हम इस समस्या को फिर से बनाने के लिए पेस्ट कॉपी कर सकते हैं? –

+0

नहीं, हम संभवतः एक तरीके से टिप्पणी नहीं कर सकते हैं या दूसरे को एक रेपो केस देखे बिना जो आप देख रहे हैं दिखाता है। Pls इसे और दस्तावेज़ों से जुड़े हुए हैं: http://blog.adamcameron.me/2013/09/short-self-contained-correct-compilable.html –

+4

मुझे संदेह है कि आप एक टीजेड में हैं जो यूटीसी -6 है? यदि आप सीएफ बगबेस (https://www.google.co.uk/search?q=bugbase.adobe.com+dateConvert) पर Google को डेट कन्वर्ट() के साथ समस्याओं का एक गुच्छा रहा है, जो एक ही समय के साथ प्रतीत होता है आप जो देख रहे हैं एडोब ने उन्हें तय करने का दावा किया है, लेकिन मैं उनके साथ कभी भी इतना यकीन नहीं रखूंगा। मुझे संदेह है कि आपकी पहली तारीख आपके स्थानीय टीजेड में है, और दूसरा यूटीसी में है, इसलिए आप उस ऑफसेट को दिनांक() परिणामों में प्रतिबिंबित कर रहे हैं। आप ' 'में TZ diff क्यों नहीं देख रहे हैं? पता नहीं। हालांकि मुझे आश्चर्य नहीं है। –

उत्तर

6

इस समस्या का कारण बग https://bugbase.adobe.com/index.cfm?event=bug&id=3338974 पर दिए गए वर्णन के कारण हो रहा है।

उपर्युक्त यूआरएल में वर्णित अनुसार 'डेटकॉन्टर ("local2Utc", अब()) से लौटाया गया चर स्थानीय से यूटीसी के ऑफसेट के आसपास ले जाता है। जब, आप उस चर का उपयोग केवल कुछ भी (cfqueryparam सहित) के लिए करते हैं, तो आप जिस मान को वापस प्राप्त करते हैं वह ऑफ़सेट की मात्रा से बंद होता है (यानी आपके द्वारा पारित मूल्य पर वापस)।

रूपांतरण के बाद तिथि को एक स्ट्रिंग में परिवर्तित करने के लिए एक वर्कअराउंड लगता है। मैंने निम्न के लिए एक सरल रैपर फ़ंक्शन बनाया है:

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

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

</cffunction> 
संबंधित मुद्दे