2009-03-04 3 views
2

Я пишу программу, которая показывает продажи текущего года с начала финансового года до текущей даты по сравнению с тем же диапазоном дат года.Учет високосного года по сравнению с годами продаж

Мой вопрос: какие усилия нужно предпринять для високосного года?

UPDATE:

OK они хотят, как я сказал (сравните в прошлом году до той же даты), но если сегодня не високосный год, и в прошлом году, и на сегодняшний день 28 февраля по сравнению с прошлым годом до 29. Или если сегодня 29 февраля по сравнению с прошлым годом до 28-го.

ответ

4

Несомненно, это зависит от того, что бизнес хочет от вас сделать. Разве это не вопрос, на который должен отвечать бухгалтер?

3

Это поражает меня как деловое решение. В зависимости от типа бизнеса этот дополнительный день может не иметь значения. В противном случае, я полагаю, вы могли бы относиться к ним как к «первым дням года», а не к «с 1 января по X».

+0

Если бы я сделал это и сравнил только прошлые годы и до сих пор в эти же дни в конце этого года, то в этом году было бы не дольше, а в прошлом году было 365 дней, а в прошлом году было 366, так что если сегодня в 365-й день, год закончился, но это было бы не по сравнению с прошлым годом. –

+0

@unknown: если это так, вы можете сравнить два года вместе, но затем «вычесть» продажи за 29 февраля и показать их отдельно. Таким образом, вы могли бы провести довольно точное сравнение 365-365. – TheTXI

+0

@unknown: Вот почему это деловое решение. Мы рады указать на то, что нужно выяснить, но в конечном итоге вам, ребятам, придется выбирать реализацию. – Pesto

1

Вот идея, но, как и другие, было сказано, что она может основываться на вашем конкретном домене.

  1. Рассмотрим 1 «нормализуются» год = 365.242199 дней, считая все високосные вещи (говорит Google)
  2. Вычислить средние продажи в день в вашем году на основе реального количества дней в этом году
  3. Scale его вверх или вниз, чтобы продажи в 365.242199 дней

Так, например

2007 = $4000 in sales. 
    There's 365 days in 2007, so avg sale per day = $10.96 
    Multpiplying times num days in a normalized year (365.242199) 
     gives you $4003.05 normalized sales 

Вы можете сравнить это непосредственно к аналогичному расчету за 2008 год,

2008 = $5000 in sales. 
    There's 366 days in 2008, so avg sale per day = $13.66 
    Multpiplying times num days in a normalized year (365.242199) 
     gives you $4975.655 normalized sales for 2008! 
0

Вы можете масштабировать до значения високосного года, чтобы взять на себя дополнительный день во внимание.

Так, если сравнивать, скажем, первого сентября регулярного года с 1 сентября високосного года вы могли бы сделать:

if(year == leapyear && day > 28Feb) 
    Convert date to dayOfYear 
    leapYearValue *= dayOfYear/(dayOfYear + 1) 

Это должно быть действительно в спецификации, хотя.