5

もう一度髪を抜く...

2つの日付の差を日数で計算する必要があります。私はこれをやっています:

 <cfset d = DateDiff("d", Dateformat( active_apps.app_base_coupon_start, "dd.mm.yyyy"), Dateformat( variables.useDate, "dd.mm.yyyy") )>

active_apps.app_base_coupon_start=と=27.07.2012今日variables.useDate= 02.10.2012

両方の値をダンプしました。問題ありません。しかし、探していたdateDiff返品(7月4日、8月31日、9月30日、10月2日)67日。-168

質問:
誰かが私が残りの髪を失うのを防ぎ、私がここで間違っていることを教えてもらえますか、または日数で違いを得るより簡単な方法がありますか?

編集:
わかりました、それはまたこのように機能します:

<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>

しかし、私はまだ知りたいのですが、なぜdateDiff奇妙な値を返すのですか。

4

3 に答える 3

7

DateDiff("datepart", date1, date2)datepart と 2 つの日付オブジェクトを引数として取ります。

DateFormat()Adam Cameron が既に述べたように、日付オブジェクトではなく文字列を返します。
ColdFusion は、いくつかの既知の日付形式を適用して、"27.07.2012" および "02.10.2012" を日付オブジェクトとして読み取ろうとしています。そのため、「02.10.2012」は「2012 年 2 月 10 日」と解釈されます。

ColdFusion に文字列の日付形式を推測させません。代わりに、を使用して日付オブジェクトを作成する必要がありますCreateDate(year, month, day)

now()ColdFusion の日付オブジェクトでもあります。

于 2012-10-02T14:43:49.473 に答える
5

まず最初に、文字列dateAdd()ではなく DATES を引数として取りdateFormat()ます。 dateFormat()計算用ではなく出力用です。

「02.10.2012」があなた (そして私) にとって日付のように見えるからといって、コンピューターに関する限り、これは日付ではなく、文字列であることを理解する必要があります。

日付の計算に文字列を使用しないでください。

あなたの場合、CFは「02.10.2012」が日付として何を意味するかを勇敢に理解しようとしており、「mm.dd.yyyy」形式であると判断しています.2月10日ですが、あなたは10月2日を意味しています.

于 2012-10-02T14:30:51.710 に答える
1

あいまいな日付形式を使用しています。DateFormat日付の計算を行うときはいつでも国際日付形式 ( ISO 8601 ) に変更すると、物事がもう少し予測しやすくなります。CF は ISO 形式のすべてのバリアントをサポートしているわけではありませんが、ほとんどの場合、yyyy-mm-ddサポートされているものだけが必要です。

<cfset d = DateDiff("d", Dateformat( active_apps.app_base_coupon_start, "yyyy-mm-dd"), Dateformat( variables.useDate, "yyyy-mm-dd") )>
于 2012-10-02T14:45:06.140 に答える