2010-09-30 27 views
6

¿Alguien sabe cómo construir un DateTime en .NET para ser el primer día del trimestre actual?.Net DateTime fiscal Quarter

+4

Eso va a depender por completo de cómo se defina un cuarto. –

+0

¿Cuántas maneras diferentes puedes definir un trimestre fiscal? – PhilBrown

Respuesta

6
public DateTime GetCurrentQuarter(DateTime date) 
{ 
    int startingMonthOfQuarter = (((date.Month - 1)/3) * 3) + 1; 

    return new DateTime(date.Year, startingMonthOfQuarter, 1); 
} 
3
 var currentTime = DateTime.Now; 
     var year = currentTime.Year; 
     DateTime[] quarterStarts = {new DateTime(year, 1, 1), new DateTime(year, 4, 1), new DateTime(year, 7, 1), new DateTime(year, 10, 1)}; 
     var currentStart = quarterStarts.Where(s => s < currentTime).Last(); 
+1

Esto va a fallar si se llama exactamente a las 12:00 medianoche del 1 de enero. También va a fallar si el año cambia en algún momento después de que se defina 'quarterStarts'. Probablemente desee modificar su prueba para incluir solo el mes y el día. –

1

@yogesh es correcto, esto es lo que utilizo en un sp sql:

CREATE FUNCTION [dbo].[fn_startOfQtr](@dt DATETIME) 
RETURNS DATETIME AS 
BEGIN 
    declare @ret DATETIME 
    declare @qtr int 

    set @qtr = ((month(@dt)-1)/3)+1 
    set @ret = cast(str(@qtr * 3 - 2) + '/1/' + str(year(@dt)) as DATETIME) 
    return @ret 
END 
Cuestiones relacionadas