Quel est le moyen le plus efficace pour calculer le dernier jour du sortingmestre en cours?
Exemple: étant donné la date 05/03/09, je veux returnner 31/03/09.
La plateforme est ColdFusion et SQL Server
SELECT DATEADD(qq, DATEDIFF(qq, - 1, '3/5/09'), - 1)
Cette réponse utilise les fonctions embeddedes Quarter et DaysInMonth:
#createDate(year(now()), (quarter(now())*3), daysInMonth(createDate(year(now()), quarter(now())*3,1)) )#
Il pourrait être plus facile de lire si son éclaté un peu.
EDIT (@Sam Farmer: J'ai pris la liberté de transformer votre suggestion en une fonction FC)
<cffunction name="LastOfQuarter" returntype="date" output="no" access="public"> <cfargument name="d" type="date" required="no" default="#Now()#"> <cfset d = CreateDate(Year(d), Quarter(d) * 3, 1)> <cfreturn DateAdd("d", d, DaysInMonth(d) - 1)> </cffunction>
Cela pourrait utiliser un refactoring, mais devrait avoir l'idée de base à travers.
<cffunction name="lastDayOfQuarter"> <cfargument name="d" default="#now()#"> <cfif month(d) lte 3> <cfreturn createDate(year(d),03,31)> </cfif> <cfif month(d) lte 6> <cfreturn createDate(year(d),06,30)> </cfif> <cfif month(d) lte 9> <cfreturn createDate(year(d),9,30)> </cfif> <cfreturn createDate(year(d),12,31)> </cffunction>
Pour get le sortingmestre d'une date spécifique:
SELECT dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,<date here>), 0)))
Ou si vous voulez dire le sortingmestre en cours:
SELECT dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)))