我正在尝试在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
设置为“上个月”的开头和结尾。当我转储lastM
和d
时,我获得了月份和DaysInMonth的正确值。当我在CreateDate
方法中使用这两个变量时,session.start
变得与2013-01-31相等,session.end
等于2013-01-30。我尝试用许多不同的方式编写方法,但我没有看到导致这种情况的原因。
我已经在这里检查了这个问题Coldfusion CreateDate Issue,但它与我遇到的情况不一样。
答案 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的最后一个参数中删除你的日期函数。只需使用1
和d
。