0

我正在尝试在 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但它与我所遇到的不同。

4

2 回答 2

3

您正在滥用该month()功能。从文档

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

您正在传递一个数字,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>
于 2013-05-16T15:39:34.840 回答
0

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

于 2013-05-16T15:37:14.753 回答