Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions lib/nepali_calendar/ad_calendar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,29 @@ def today
end

def beginning_of_week
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month],
wday_name: Date::DAYNAMES[wday] }
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month.to_i],
wday_name: Date::DAYNAMES[wday.to_i] }
formatted_date = Date.parse(NepaliCalendar::Calendar.new('', date).to_s)
formatted_date.beginning_of_week
end

def end_of_week
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month],
wday_name: Date::DAYNAMES[wday] }
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month.to_i],
wday_name: Date::DAYNAMES[wday.to_i] }
formatted_date = Date.parse(NepaliCalendar::Calendar.new('', date).to_s)
formatted_date.end_of_week
end

def beginning_of_month
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month],
wday_name: Date::DAYNAMES[wday] }
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month.to_i],
wday_name: Date::DAYNAMES[wday.to_i] }
formatted_date = Date.parse(NepaliCalendar::Calendar.new('', date).to_s)
formatted_date.beginning_of_month
end

def end_of_month
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month],
wday_name: Date::DAYNAMES[wday] }
date = { year: year, month: month, day: day, wday: wday, month_name: Date::MONTHNAMES[month.to_i],
wday_name: Date::DAYNAMES[wday.to_i] }
formatted_date = Date.parse(NepaliCalendar::Calendar.new('', date).to_s)
formatted_date.end_of_month
end
Expand All @@ -70,7 +70,7 @@ def self.travel_forward(days)
ad = Date.parse(ref_date['bs_to_ad']['ad']) + days

option = { year: ad.year, month: ad.month, day: ad.day, wday: ad.wday,
month_name: Date::MONTHNAMES[ad.month], wday_name: ad.strftime('%A') }
month_name: Date::MONTHNAMES[ad.month.to_i], wday_name: ad.strftime('%A') }
new('', option)
end

Expand Down Expand Up @@ -111,5 +111,9 @@ def date_range
start_date.end_of_month.end_of_week
]
end

def to_date
Comment thread
sangamsth marked this conversation as resolved.
Date.new(year, month, day)
end
end
end
39 changes: 39 additions & 0 deletions lib/nepali_calendar/bs_calendar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module NepaliCalendar
class BsCalendar < NepaliCalendar::Calendar
MONTHNAMES = %w[nil Baisakh Jestha Ashad Shrawn Bhadra Ashwin Kartik Mangshir Poush Magh Falgun Chaitra].freeze
DAYNAMES = %w[nil Aitabar Sombar Mangalbar Budhbar Bihibar Sukrabar Sanibar].freeze

class << self
def ad_to_bs(year, month, day)
raise NepaliCalendar::Calendar::NilDateFieldsException unless valid_date_input?(year, month, day)
Expand All @@ -29,6 +30,20 @@ def today
end
end

def date
# Convert nepali date to Ad date
date = self.to_ad

# Create new date object with the Ad date
date_object = Date.new(date[:year], date[:month], date[:day])

# Get the week_day name, month name
weekday_name = DAYNAMES[date_object.wday + 1]
month_name = MONTHNAMES[@month]

{ weekday_name: weekday_name, month_name: month_name, day: @day, month: @month, year: @year }
end

def beginning_of_week
date = { year: year, month: month, day: day, wday: wday }
days = wday > 1 ? -(wday - 1) : 0
Expand Down Expand Up @@ -146,5 +161,29 @@ def date_range
start_date.end_of_month.end_of_week
]
end

def to_ad
if !year || !month || !day
raise NilDateFieldsException
end

if !NepaliCalendar::Calendar.valid_date_input?(year, month, day)
raise InvalidBSDateException
end

ad_date = NepaliCalendar::Calendar.ref_date['bs_to_ad']['ad']
bs_date = NepaliCalendar::Calendar.ref_date['bs_to_ad']['bs']

total_days = NepaliCalendar::Calendar.total_days_for_bs("#{year}/#{month}/#{day}", bs_date)
ad_date = Date.parse(ad_date) + total_days
{
year: ad_date.year,
month: ad_date.month,
day: ad_date.day,
wday: ad_date.wday,
month_name: I18n.t("date.month_names")[ad_date.month],
wday_name: I18n.t("date.day_names")[ad_date.wday],
}
end
end
end
26 changes: 26 additions & 0 deletions spec/nepali_calendar_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,15 @@
d1 = NepaliCalendar::BsCalendar.ad_to_bs(2015, 10, 20).end_of_month
expect(d1.class).to eq(NepaliCalendar::BsCalendar)
end

describe '#to_ad' do
let(:expected_date) { { year: 2023, month: 3, day: 7, wday: 2, month_name: "March", wday_name: "Tuesday" } }
let(:bs_calendar) { NepaliCalendar::BsCalendar.new(nil, { year: 2079, month: 11, day: 23 }) }

it 'converts the date from the BS to the AD date' do
expect(bs_calendar.to_ad).to eq(expected_date)
end
end
end

context '#AdCalendar' do
Expand Down Expand Up @@ -158,6 +167,23 @@
d1 = NepaliCalendar::AdCalendar.bs_to_ad(2076, 7, 15).end_of_month
expect(d1).to eq(Date.parse('Sat, 30 Nov, 2019'))
end

describe '#to_date' do
it 'returns a Date object for a valid Ad date' do
ad_calendar = NepaliCalendar::AdCalendar.new(nil, { year: 2033, month: 12, day:12 })
date = ad_calendar.to_date
expect(date).to be_a(Date)
expect(date.year).to eq(2033)
expect(date.month).to eq(12)
expect(date.day).to eq(12)
end

it 'raises an error for an invalid date string' do
expect { ad_date.to_date('2022-02-31') }.to raise_error(ArgumentError)
expect { ad_date.to_date('2022-13-01') }.to raise_error(ArgumentError)
expect { ad_date.to_date('2022-01-') }.to raise_error(ArgumentError)
end
end
end

context '#FiscalYear' do
Expand Down