Учет високосного года при сравнении годовой выручки
Я пишу программу, которая показывает текущие продажи за период с начала финансового года до текущей даты по сравнению с тем же диапазоном дат предыдущего года.
Мой вопрос: какие усилия мне нужно предпринять для високосного года?
ОБНОВИТЬ:
Хорошо, они хотят, как я сказал (сравните прошлый год с той же датой), но если сегодня не високосный год, а прошлый год и сегодня 28 февраля, то по сравнению с прошлым годом до 29-го. Или, если сегодня 29 февраля, сравните с прошлым годом до 28 числа.
4 ответа
Конечно, это зависит от того, что бизнес хочет, чтобы вы делали. Разве это не вопрос, на который должен ответить бухгалтер?
Это кажется мне деловым решением. В зависимости от типа бизнеса этот дополнительный день может не иметь значения. В противном случае, я полагаю, вы можете рассматривать это как "первые n дней в году", а не как "с 1 января по X".
Вот идея, но, как и другие говорили, она может быть основана на вашем конкретном домене.
- Рассмотрим 1 "нормализованный" год = 365,242199 дней с учетом всех скачков (говорит Google)
- Рассчитайте средние продажи за день в вашем году на основе реального количества дней в этом году
- Увеличьте или уменьшите объем продаж за 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!
Вы можете уменьшить значения високосного года, чтобы учесть дополнительный день.
Поэтому, если вы сравните, скажем, 1 сентября обычного года с 1 сентября високосного года, вы сделаете:
if(year == leapyear && day > 28Feb)
Convert date to dayOfYear
leapYearValue *= dayOfYear / (dayOfYear + 1)
Это действительно должно быть в спецификации, хотя.