ColdFusion最快的方式是获得季度的第一天和最后一天?

时间:2009-10-05 11:49:58

标签: coldfusion

ColdFusion获得季度第一天和最后一天的最快方式是什么?

似乎没有内置功能。<​​/ p>

6 个答案:

答案 0 :(得分:5)

我觉得你的问题看起来可能更复杂......对于大多数用途来说,这些值是一个已知的集合 - 无需计算:

闱:

1月1日 - 3月31日 4月1日至6月30日 7月1日至9月30日 10月1日 - 12月31日

由于该集合事先已知,因此不需要函数 - 确定一个季度下降的日期是一系列简单的“if”语句(伪代码):

如果日期&gt; 10月1日然后Q4 如果日期&gt; 7月1日然后Q3其他 如果日期&gt; 4月1日然后Q2其他 如果日期&gt; 1月1日然后是Q1

(在这种情况下你会向后检查以检查最严格的匹配。虽然,正如Kimvais指出的那样,有一个函数可以完全按照CFML中的那个进行。)

对于其他“季度”系统,它应该基本相同,除非这些日期以某种方式计算。

如果我错过了标记,请随意添加评论以澄清。

答案 1 :(得分:5)

季度的第一天:

FirstDayOfQuarter = CreateDate(year, (quarter-1)*3 + 1, 1)

季度的最后一天:

LastDayOfQuarter = DateAdd("d", -1, DateAdd("m", 3, FirstDayOfQuarter))

答案 2 :(得分:3)

问题是“季度”是一个相对术语,而许多组织遵循从1月1日到12月31日的一年的默认季度细分,许多其他组织也会跟随其他季度。

例如大多数零售组织。特别是那些依赖圣诞节的人,不想花时间在12月份结束季度/年度财务。他们还希望整个假日季节(包括之后的2周)与本赛季剩余的时间相同。所以对于他们来说,“年”从2月1日开始。

由于立法,选举和预算的运作方式,美国联邦政府和大多数州在10月1日的财政年度开始。

因此,仅使用四分之一布局的单个函数将无法工作。其他答案中列出的任何功能都很好我只要你的程序只处理一组就可以了。但是,如果您的编码是一般用途应用程序,那么您可能希望使其可配置。

答案 3 :(得分:2)

看起来有一个function用于查找季度,基于此你可以硬编码吗?

答案 4 :(得分:2)

我认为没有内置的功能 - 目前尚不清楚您是在寻找月份的数字日期还是字符串日期(例如星期一)。无论如何,这可能有点过分 - 两个函数需要一个整数四分之一值,并返回该季度的第一个和最后一个日期以进一步操作:

<cffunction name="QuarterFirstDate" returnType="date">
    <cfargument name="quarternumber" required="yes" type="numeric">
    <cfargument name="yr" type="numeric" default="2009">
    <cfargument name="startmonth" type="numeric" default="1">
    <cfset firstDate = DateAdd("m",startmonth-1,CreateDate(yr, ((quarternumber-1)*3)+1, "1"))>
    <cfreturn firstDate>
</cffunction>

<cffunction name="QuarterLastDate" returnType="date">
    <cfargument name="quarternumber" required="yes" type="numeric">
    <cfargument name="yr" type="numeric"  default="2009">
    <cfargument name="startmonth" type="numeric" default="1">
    <cfset lastDate = DateAdd("m",startmonth-1,CreateDate(yr, quarternumber*3, DaysInMonth(CreateDate(yr, quarternumber*3, "1"))))>
    <cfreturn lastDate>
</cffunction>

<cfset year = "2009">
<cfset startmonth = "1">

<cfloop index="quarter" from="1" to="4">
    <cfoutput>
        <h2>Quarter #quarter#</h2>
        #DateFormat(QuarterFirstDate(quarter, year, startmonth))#, day #DayOfYear(QuarterFirstDate(quarter, year, startmonth))#, #DayOfWeekAsString(DayOfWeek(QuarterFirstDate(quarter, year, startmonth)))#<br />
        #DateFormat(QuarterLastDate(quarter, year, startmonth))#, day #DayOfYear(QuarterLastDate(quarter, year, startmonth))#, #DayOfWeekAsString(DayOfWeek(QuarterLastDate(quarter, year, startmonth)))#<br />
    </cfoutput>
</cfloop>

编辑:更新以允许指定四分之一的开始月份

答案 5 :(得分:0)

如何?

<cfset dt = now()>

<cfset DateLastQuarter = DateAdd("m",-3,dt)> <!--- Any date three months ago falls in previous quarter --->
<cfset quarterNumber = (month(DateLastQuarter)-1)\3+1> <!--- range from quarter 1-4 --->
<cfset StartQuarterMonth = (quarterNumber-1)*3+1> <!--- start of quarter month-number where Jan=1 (Mathematical magic) --->

<cfset LastQuarterFrom = CreateDate(year(DateLastQuarter),StartQuarterMonth,1)>
<cfset LastQuarterTo = DateAdd("d",-1,DateAdd("m",3,LastQuarterFrom))> <!--- the day before three months later --->

上面的内容返回LastQuarterFrom中上一个季度的第一个日期 和LastQuarterTo上一个季度的最后一个日期