在ColdFusion / CFWheels中创建问题



我正在尝试使用CreateDate在CFWheels和我得到愚蠢的错误,我将在秒中详细解释。

首先,这是我的代码

<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问题,但它与我所经历的不一样。

您正在滥用month()函数。来自文档:

日期/时间对象中提取月份值

传入一个数字,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>

从createDate的最后一个参数中删除您的日期函数。就用1d

最新更新