2009-10-05 8 views

Répondre

4

premier jour du trimestre:

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

Dernier jour du trimestre:

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

On dirait qu'il y a un function pour trouver le trimestre, basé sur ce que vous pourriez hardcode ces?

+0

C'est à peu près ce que nous avons toujours fait. Je cherchais simplement quelque chose de simple et suffisamment intégré pour ne pas avoir besoin d'une définition de fonction supplémentaire. –

5

J'ai le sentiment que votre question est peut-être plus complexe qu'il semble ... pour la plupart des ces valeurs sont un ensemble connu - pas besoin de calculer:

Quartiers:

1 Janvier - mars 31 Avril 1 - 30 Juin Juillet 1 - 30 Septembre Octobre 1 - 31 Décembre

Puisque l'ensemble est connu à l'avance, il n'y a pas de besoin réel pour une fonction pour cela - déterminer dans quelle date un quart tombe est simple série d'instructions "if" (psuedocode):

si la date> 1 octobre puis Q4 autre si la date> 1 juillet puis Q3 autre si la date> 1 avril puis Q2 autre si la date> Jan 1, puis Q1

(Vous faites le contrôle en arrière dans ce cas de vérifier le match le plus restrictif en premier. Bien que, comme Kimvais le souligne, il y a déjà une fonction à faire exactement dans CFML.)

Cela devrait être essentiellement la même chose pour les autres systèmes du «quart», sauf si ces dates sont calculées d'une manière ou d'une autre.

Si j'ai manqué la marque, n'hésitez pas à ajouter un commentaire pour clarifier.

+1

Par conséquent, étant donné QuarterMonthFirst comme tableau de valeurs [1,4,7,10] et QuarterMonthLast comme tableau [1,1,1,1], le calcul pour obtenir le premier jour du trimestre est: CreateDate (DatePart ("yyyy" , targetDate), QuarterMonthFirst [quartier (targetDate)], QuarterDayFirst [trimestre (targetDate)]) Compte tenu DEFINITIONS du tableau similaire QuarterMonthLast et QuarterDayLast, le dernier jour du trimestre est: CreateDate (DatePart ("aaaa", targetDate), QuarterMonthLast [Quarter (targetDate)], QuarterDayLast [Quarter (targetDate)]) – Mead

+0

Je peux me tromper, mais je pense que vous avez ceci en arrière. Je ne cherche pas le trimestre où une date donnée tombe, je cherche les dates de début et de fin pour un trimestre donné. –

2

Je ne pense pas qu'il existe des fonctions intégrées pour cela - il n'est pas clair si vous recherchez le jour numérique du mois ou le jour de la chaîne du mois (par exemple lundi). Quoi qu'il en soit, cela peut être un peu over-the-top - deux fonctions qui nécessitent une valeur de trimestre entier, et renvoient les première et dernière dates du trimestre pour une manipulation supplémentaire:

<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> 

modifier: mise à jour pour permettre un quart mois commencer à préciser

3

Le problème est que «trimestre» est un terme relatif, alors que de nombreuses organisations suivent la répartition trimestrielle par défaut d'une année commençant le 1er janvier au 31 décembre, de nombreuses autres organisations suivent d'autres trimestres.

Par exemple la plupart des organisations de vente au détail. Particulièrement ceux qui dépendent de Noël, ne veulent pas passer du temps à faire des finances fin de trimestre/année en décembre. Ils veulent aussi toute la saison des fêtes (y compris les 2 semaines après) sur les mêmes livres que le reste de la saison. L'année commence donc le 1er février. Le gouvernement fédéral des États-Unis et la plupart des États commencent leur année financière le 1er octobre en raison de la manière dont fonctionnent la législature, les élections et les budgets.

Ainsi, une seule fonction fonctionnant toujours avec un quart de mise en page ne fonctionnerait jamais. Toutes les fonctions énumérées dans les autres réponses sont bien, je suis sûr que tant que votre programme ne traite que d'un ensemble. Mais si vous codez une application d'utilisation générale, vous voudrez peut-être la configurer.

Questions connexes