NepaliCalendarToolkit
Beyond conversion: This toolkit made easy – configurable weekends, holidays, and date ranges for months, quarters, fiscal years, or any custom period.
Features
- Convert between AD (Gregorian) and BS (Nepali) dates
- Configurable weekend days
- Nepali public holidays support
- Date range calculations
- Month, quarter, and fiscal year helpers
- Working day calculations
- Accurate calendar data from 1970-2099 BS
Installation
dotnet add package NepaliCalendarToolkitQuick Start
Basic Date Conversion
using NepaliCalendarToolkit;
// Convert AD to BSDateOnly adDate = new DateOnly(2024, 1, 15);NepaliDate bsDate = NepaliCalendar.ConvertToNepali(adDate);Console.WriteLine(bsDate); // Output: 2080/10/01
// Convert BS to ADNepaliDate bsDate = new NepaliDate(2080, 10, 1);DateOnly adDate = NepaliCalendar.ConvertToEnglish(bsDate);Console.WriteLine(adDate); // Output: 1/15/2024Working with NepaliDate
// Create a Nepali dateNepaliDate date = new NepaliDate(2080, 10, 15);
// Access propertiesConsole.WriteLine($"Year: {date.Year}"); // 2080Console.WriteLine($"Month: {date.Month}"); // 10Console.WriteLine($"Day: {date.Day}"); // 15
// Format outputConsole.WriteLine(date.ToString("yyyy/MM/dd")); // 2080/10/15Console.WriteLine(date.ToString("MMMM dd, yyyy")); // Magh 15, 2080Working Days
Calculate Working Days
var calendar = new NepaliCalendarService();
// Get working days between two datesvar start = new NepaliDate(2080, 1, 1);var end = new NepaliDate(2080, 1, 31);int workingDays = calendar.GetWorkingDays(start, end);Configure Weekends
// Configure custom weekend days (default: Saturday only)var options = new NepaliCalendarOptions{ WeekendDays = new[] { DayOfWeek.Saturday }};
var calendar = new NepaliCalendarService(options);
// For Middle East countries where Friday-Saturday are weekendsvar options = new NepaliCalendarOptions{ WeekendDays = new[] { DayOfWeek.Friday, DayOfWeek.Saturday }};Holidays
Get Holidays
var calendar = new NepaliCalendarService();
// Get all holidays for a yearvar holidays = calendar.GetHolidays(2080);
foreach (var holiday in holidays){ Console.WriteLine($"{holiday.Date}: {holiday.Name}");}
// Check if a date is a holidayvar date = new NepaliDate(2080, 9, 15); // Dashainbool isHoliday = calendar.IsHoliday(date);Add Custom Holidays
var options = new NepaliCalendarOptions();options.CustomHolidays.Add(new Holiday{ Date = new NepaliDate(2080, 5, 1), Name = "Company Anniversary", IsRecurring = true});
var calendar = new NepaliCalendarService(options);Built-in holidays include major Nepali festivals like Dashain, Tihar, New Year, and national holidays.
Date Ranges
Get Month Range
var calendar = new NepaliCalendarService();
// Get start and end dates of a monthvar range = calendar.GetMonthRange(2080, 10); // Magh 2080Console.WriteLine($"Start: {range.Start}");Console.WriteLine($"End: {range.End}");Console.WriteLine($"Days: {range.TotalDays}");Get Fiscal Year Range
// Nepali fiscal year starts from Shrawan (month 4)var fiscalYear = calendar.GetFiscalYearRange(2080);Console.WriteLine($"FY 2080/81: {fiscalYear.Start} to {fiscalYear.End}");Get Quarter Range
// Get quarter rangevar q1 = calendar.GetQuarterRange(2080, 1);var q2 = calendar.GetQuarterRange(2080, 2);var q3 = calendar.GetQuarterRange(2080, 3);var q4 = calendar.GetQuarterRange(2080, 4);Validation
Validate Nepali Date
var calendar = new NepaliCalendarService();
// Check if date is validbool isValid = calendar.IsValidDate(2080, 10, 32);// Returns false - Magh doesn't have 32 days
// Get days in monthint days = calendar.GetDaysInMonth(2080, 2); // Jestha// Returns 31 or 32 depending on the yearNepali calendar has variable month lengths. Always validate dates before processing.
Advanced Usage
Add/Subtract Days
var date = new NepaliDate(2080, 10, 15);
// Add daysvar futureDate = date.AddDays(10);
// Add monthsvar futureMonth = date.AddMonths(2);
// Add yearsvar futureYear = date.AddYears(1);Get Age
var birthDate = new NepaliDate(2040, 5, 15);var age = NepaliCalendar.GetAge(birthDate);Console.WriteLine($"Age: {age.Years} years, {age.Months} months, {age.Days} days");API Reference
NepaliDate
| Property | Type | Description |
|---|---|---|
Year | int | Year in BS |
Month | int | Month (1-12) |
Day | int | Day of month |
DayOfWeek | DayOfWeek | Day of week |
NepaliCalendarService
| Method | Description |
|---|---|
ConvertToNepali(DateOnly) | Convert AD to BS |
ConvertToEnglish(NepaliDate) | Convert BS to AD |
GetWorkingDays(start, end) | Count working days |
IsHoliday(date) | Check if holiday |
GetHolidays(year) | Get all holidays for year |
GetMonthRange(year, month) | Get month date range |
GetFiscalYearRange(year) | Get fiscal year range |
GetQuarterRange(year, quarter) | Get quarter range |
Example: Leave Calculator
public class LeaveCalculator{ private readonly NepaliCalendarService _calendar;
public LeaveCalculator() { _calendar = new NepaliCalendarService(); }
public int CalculateLeaveDays(NepaliDate start, NepaliDate end) { return _calendar.GetWorkingDays(start, end); }
public NepaliDate GetReturnDate(NepaliDate start, int leaveDays) { var current = start; int countedDays = 0;
while (countedDays < leaveDays) { current = current.AddDays(1);
if (!_calendar.IsHoliday(current) && !_calendar.IsWeekend(current)) { countedDays++; } }
return current; }}Use this toolkit for payroll systems, leave management, and any application requiring Nepali calendar support.
Support
- NuGet Package
- Report issues via GitHub