为什么ColdFusion的DateDiff返回奇怪/负值?

fre*_*ent 4 coldfusion datediff date

再次拉出我的头发......

我需要计算两个日期之间的差异.我这样做:

 <cfset d = DateDiff("d", Dateformat( active_apps.app_base_coupon_start, "dd.mm.yyyy"), Dateformat( variables.useDate, "dd.mm.yyyy") )>
Run Code Online (Sandbox Code Playgroud)

使用active_apps.app_base_coupon_start= 27.07.2012variables.useDate= today = 02.10.2012.

我抛弃了两个值,他们没关系.然而,当我寻找的dateDiff回报-168(7月4天,8月31日,9月30日,10月2日)67天.

问:
有人可以阻止我失去了我剩余的头发,告诉我我在做什么错在这里或者,如果有一个更简单的方式来获得在天有什么区别?

编辑:
好的,它也是这样的:

<cfif DateAdd("d", active_apps.app_grace_time, Dateformat( active_apps.app_base_coupon_start, "dd.mm.yyyy") ) GT now()>
     <cfdump output="e:\s\page\t\dump.txt" label="catch" var="YUP"> 
<cfelse>
    <cfdump output="e:\s\page\t\dump.txt" label="catch" var="NOPE"> 
</cfif>
Run Code Online (Sandbox Code Playgroud)

但我还是想知道,为什么dateDiff要回归奇怪的价值观.

jan*_*jan 7

DateDiff("datepart", date1, date2) 将datepart和两个日期对象作为参数.

DateFormat()正如Adam Cameron已经说过的那样,它返回一个字符串而不是一个日期对象
ColdFusion试图通过尝试应用一些已知的日期格式来尝试将"27.07.2012"和"02.10.2012"作为日期对象.这就是"02.10.2012"被解释为"2012年2月10日"的原因.

我不会让ColdFusion猜测你的字符串的日期格式.相反,您应该使用创建日期对象CreateDate(year, month, day).

now() 也是一个ColdFusion日期对象.


Ada*_*ron 5

首先,dateAdd()将DATES作为参数,而不是dateFormat()-ed字符串. dateFormat()用于输出,不用于计算.

你需要理解,因为"02.10.2012"看起来像是对你(和我)的日期,就计算机而言,它不是一个日期:它是一个字符串.

切勿使用字符串进行日期计算.

在你的情况下,CF正勇敢地尝试找出"02.10.2012"可能意味着什么作为日期,并决定它是"mm.dd.yyyy"格式,即2月10日,而你的意思是10月2日.