public static void Main()
var date = new DateTime(2021, 8, 15);
print(date, "startdato");
print(GetFirstDate(date, 1), "månedlig");
print(GetFirstDate(date, 2), "kvartal");
print(GetFirstDate(date, 3), "halvårlig");
print(GetFirstDate(date, 4), "årlig");
date = new DateTime(2021, 12, 15);
print(date, "startdato");
print(GetFirstDate(date, 1), "månedlig");
print(GetFirstDate(date, 2), "kvartal");
print(GetFirstDate(date, 3), "halvårlig");
print(GetFirstDate(date, 4), "årlig");
DateTime fromDate = new DateTime(2021,08,04);
DateTime toDate = new DateTime(2021,08,05);
var antall = GetCalculationFraction(toDate, fromDate);
printStr("Antall:"+antall.ToString());
var belop = pris * antall;
printStr(belop.ToString());
printStr(pris.ToString());
private static decimal GetCalculationFraction(DateTime ToDate, DateTime FromDate)
double numberOfYearsInMonths = (ToDate.Year - FromDate.Year) * 12;
double numberOfMonths = (ToDate.Month - FromDate.Month);
var totalMonths = numberOfYearsInMonths + numberOfMonths;
printStr(totalMonths.ToString());
if (ToDate.Day != FromDate.Day)
var month = FromDate.Month;
var numberOfDays = days - FromDate.Day + ToDate.Day;
printStr("days"+days.ToString());
printStr("numberofdays"+numberOfDays.ToString());
totalMonths += (numberOfDays / days);
printStr(totalMonths.ToString());
printStr((totalMonths/12).ToString());
return (decimal)(totalMonths / 12);
public static DateTime GetFirstDate(DateTime date, int frequency)
return date.Day >= 20 ? new DateTime(date.Year, date.Month + 1, 1) : new DateTime(date.Year, date.Month, 1);
return date.GetNextQuarterStart();
return date.GetNextHalfYearStart();
return date.GetNextYearStart();
public static void print(DateTime d, string s)
Console.WriteLine(d.ToString("dd.MM.yyyy") + (s != null ? " : " + s : ""));
public static void printStr(string s)
public static class DateTimeExtensions
public static int GetQuarterStart(this DateTime date)
return (date.Month + 2) / 3;
public static DateTime GetNextQuarterStart(this DateTime date)
int firstMndInQuarter = (((date.Month + 2) / 3) * 3) + 1 > 10 ? 1 : (((date.Month + 2) / 3) * 3) + 1;
int year = firstMndInQuarter == 1 ? date.Year + 1 : date.Year;
return new DateTime(year, firstMndInQuarter, 1);
public static DateTime GetNextHalfYearStart(this DateTime date)
return date.Month < 7 ? new DateTime(date.Year, 7, 1) : new DateTime(date.Year + 1, 1, 1);
public static DateTime GetNextYearStart(this DateTime date)
return new DateTime(date.Year + 1, 1, 1);