ColdFusion / CFWheels中的CreateDate问题

时间:2013-05-16 14:54:53

标签: coldfusion coldfusion-9 cfwheels

我正在尝试在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>

正如您所看到的,我正在尝试将会话变量startend设置为“上个月”的开头和结尾。当我转储lastMd时,我获得了月份和DaysInMonth的正确值。当我在CreateDate方法中使用这两个变量时,session.start变得与2013-01-31相等,session.end等于2013-01-30。我尝试用许多不同的方式编写方法,但我没有看到导致这种情况的原因。

我已经在这里检查了这个问题Coldfusion CreateDate Issue,但它与我遇到的情况不一样。

2 个答案:

答案 0 :(得分:3)

您滥用month()功能。 From the docs

  

日期/时间对象

中提取月份值

你传入一个数字,CF隐含地转换为一个日期(可能是01/03/1900),而不是正确的数字。因此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>

答案 1 :(得分:0)

从createDate的最后一个参数中删除你的日期函数。只需使用1d