Учет високосного года при сравнении годовой выручки - PullRequest
2 голосов
/ 04 марта 2009

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

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

UPDATE:

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

Ответы [ 4 ]

4 голосов
/ 04 марта 2009

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

3 голосов
/ 04 марта 2009

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

1 голос
/ 04 марта 2009

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

  1. Рассмотрим 1 "нормализованный" год = 365,242199 дней, считая все скачки (говорит Google)
  2. Рассчитайте средние продажи за день в вашем году на основе реального количества дней в этом году
  3. Увеличение или уменьшение продаж до 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 голосов
/ 04 марта 2009

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

Итак, если вы сравните, скажем, 1 сентября обычного года с 1 сентября високосного года, вы сделаете:

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

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

...