2013-05-16 2 views
0

CFWheels에서 CreateDate를 사용하려고하는데 바보 같은 오류가 발생합니다. 자세한 내용은 초 단위로 설명합니다. 시작하려면ColdFusion/CFWheels에서 CreateDate 문제

이 내 코드

<cfscript> 
      lastM = dateFormat(CreateDate(year(now()),month(now())-1,day(now())),'MM'); 
      d = DaysInMonth(lastM); 
      session.start = dateFormat(CreateDate(Year(rightnow),Month(lastM),Day(01)),'YYYY-MM-DD'); 
      session.end = dateFormat(CreateDate(Year(rightnow),Month(lastM),Day(d)),'YYYY-MM-DD'); 
      session.date = "last_month"; 
</cfscript> 

당신은 내가 내 세션 변수 start 및 시작과 '지난 달'의 끝 end을 설정하려고 볼 수있는 것입니다. lastMd을 덤프하면 해당 월과 DaysInMonth에 대한 올바른 값을 얻게됩니다. CreateDate 메서드에서이 두 변수를 사용하면 session.start이 2013-01-31과 같아지고 session.end은 2013-01-30과 같습니다. 나는 여러 가지 방법으로 방법을 쓰려고했지만이 문제의 원인을 알 수 없다.

여기에서 이미 Coldfusion CreateDate Issue 호를 확인했지만 경험 한 것과 다를 수 있습니다.

답변

3

month() 기능을 잘못 사용하고 있습니다. From the docs :

추출하는 날짜/시간 객체의 월 값

당신은 CF가 암시 적으로 (아마 1900년 1월 3일) 날짜로 변환되는 숫자에 전달하는 , 올바른 것이 아닙니다. 따라서 month()은 실제로 1을 반환합니다. 이것이 결과가 2013 년 1 월이라고 표시된 이유입니다.

dateAdd을 사용하는 것이 더 간단한 방법입니다. 현재 달 중 첫 번째 달만 계산하면됩니다. 그런 다음 지난 달의 시작과 끝을 얻으려면 몇 달 또는 며칠을 빼십시오. (참고 : 값을 날짜 개체로 남겨두고 사용자에게 표시해야하는 경우에만 값을 "포맷"합니다.)

<cfscript> 
    today = now(); 
    firstOfThisMonth = CreateDate(year(today), month(today), 1); 
    firstOfLastMonth = dateAdd("m", -1, firstOfThisMonth); 
    endOfLastMonth = dateAdd("d", -1, firstOfThisMonth); 
</cfscript> 
+0

감사합니다. 이것은 4 월을 30 대신 31 일로 설정했기 때문에 '월간'오류를 일으켰습니다. – Geo

+0

그래, 그렇기 때문에 자신을 굴리기보다는 날짜 기능을 사용하는 것이 좋습니다. 날짜 함수는 당신을위한 핵심 정보를 처리합니다 :) – Leigh

0

createDate의 마지막 인수에서 day 함수를 제거하십시오. 1d을 사용하면됩니다.

+0

답변을 주셔서 감사합니다.하지만 Leigh는 필요에 따라 작동했습니다. – Geo

+0

그리고 그 질문을 게시하기 전에 내가 한 일이지만 작동하지 않았다. – Geo