2010-04-20 32 views

Trả lời

10

Mặc dù về cơ bản không khác so với udf, tôi thích this guy's approach. Không cao được thử nghiệm, nhưng bạn cũng có thể làm một cái gì đó như thế này:

Sửa Bạn đã không đề cập đến một phiên bản, vì vậy tôi cho rằng CF8

<cffunction name="relativeDate" returnType="string" access="public" output="false"> 
    <cfargument name="theDate" type="date"> 
    <cfset var x  = "" /> 
    <cfset var diff = "" />  
    <cfset var result = "unknown" />  
    <cfset var dateNow = now() /> 
    <cfset var codes = [ "yyyy", "m", "ww", "d", "h", "n", "s" ] /> 
    <cfset var names = [ "year", "month", "week", "day", "hour", "minute", "second" ] /> 

    <cfif dateCompare(arguments.theDate, now()) gt 0> 
     <!--- replace with other code to handle future dates ....---> 
     <cfthrow message="Future date handling not implemented"> 
    </cfif> 

    <!--- check each date period ...---> 
    <cfloop from="1" to="#arrayLen(codes)#" index="x"> 
     <cfset diff = abs(dateDiff(codes[x], arguments.theDate, dateNow)) /> 
     <!--- this is the greatest date period ---> 
     <cfif diff gt 0 > 
      <cfif diff gt 1> 
       <cfset result = "about "& diff &" "& names[x] &"s ago" /> 
      <cfelseif names[x] eq "hour"> 
       <cfset result = "about an "& names[x] &" ago" /> 
      <cfelse> 
       <cfset result = "about a "& names[x] &" ago" /> 
      </cfif> 

      <cfbreak> 
     </cfif> 
    </cfloop>  

    <cfreturn result /> 
</cffunction> 
+0

tại sao bạn cần khai báo 'var x'? –

+1

Đây là một biến vòng lặp cục bộ của hàm, vì vậy nó phải là var/local scoped. – Leigh

5

Bạn có thể thử udf này từ cflib.org: http://cflib.org/udf/ago

+1

Tôi không biết lý do tại sao một vòng lặp do..while là cần thiết. Anh ta có thể trả lại thay vì nghỉ. – Henry

+0

chưa tự mình sử dụng, nhưng đó là điểm khởi đầu ít nhất – Antony

Các vấn đề liên quan